婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Bash技巧:把變量賦值為換行符(判斷文件是否以換行符結尾)

Bash技巧:把變量賦值為換行符(判斷文件是否以換行符結尾)

熱門標簽:蘭州電銷機器人加盟 沈陽ai電銷智能機器人 電商外呼系統(tǒng)排名 電話機器人對家居行業(yè)幫助大嗎 黑暗之魂3地圖標注 如何申請400的電話呀 AI智能電銷機器人壞處 地圖標注審核周期 合肥電銷外呼系統(tǒng)供應商

變量賦值為換行符

在 bash 中,如果要把變量賦值為換行符,寫為 '\n' 沒有效果,需要寫為 $'\n'。具體舉例如下:

$ newline='\n'
$ echo $newline
\n
$ newline=$'\n'
$ echo $newline

可以看到,把 newline 變量賦值為 'n',得到的是 n 這個字符串,而不是換行符自身。

這是 bash 和 C 語言不一樣的地方。
在 C 語言中,'n' 對應換行符自身,只有一個字符;而 "n" 對應一個字符串。
但是在 bash 中,'n' 也是對應一個字符串。

把 newline 賦值為 $'\n',就能獲取到換行符自身。查看 man bash 對這個寫法的說明如下:

Words of the form $'string' are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows:

 \n  new line
 \r  carriage return
 \t  horizontal tab
 \'  single quote

The expanded result is single-quoted, as if the dollar sign had not been present.

即,$'string' 這個寫法可以使用 C 語言的轉(zhuǎn)義字符來獲取到對應的字符自身。

判斷文件的最后一行是否以換行符結尾

在 Linux 中,可以使用下面命令來判斷文件的最后一行是否以換行符結尾:

test -n "$(tail filename -c 1)"

這里使用 tail filename -c 1 命令獲取到 filename 文件的最后一個字符。

實際使用時,需要把 filename 換成具體要判斷的文件名。

tail 命令可以獲取文件末尾的內(nèi)容。它的 -c 選項指定要獲取文件末尾的多少個字節(jié)。

查看 man tail 對 -c 選項的說明如下:

-c, --bytes=K

output the last K bytes; alternatively, use -c +K to output bytes starting with the Kth of each file.

即,tail -c 1 命令指定獲取所給文件的最后一個字符。

獲取到文件的最后一個字符后,要判斷該字符是不是換行符。這里不能直接判斷該字符是否等于換行符,而是要判斷該字符是否為空。

原因在于,使用 $(tail filename -c 1) 命令替換來獲取內(nèi)部命令的輸出結果時,bash 會去掉末尾的換行符。

所以當文件的最后一行以換行符結尾時,$(tail filename -c 1) 命令替換會去掉獲取到的換行符,最終結果為空,并不會返回換行符自身。

查看 man bash 對命令替換(command substitution)的說明如下:

Command substitution allows the output of a command to replace the command name. There are two forms:

  $(command)
 or
  `command`

Bash performs the expansion by executing command and replacing the command substitution with the standard output of the command, with any trailing newlines deleted. Embedded newlines are not deleted, but they may be removed during word splitting.

可以看到,經(jīng)過命令替換后,會去掉末尾的換行符。

由于 $(tail filename -c 1) 命令替換會去掉末尾的換行符,這里使用 test -n 來判斷最終結果是否為空字符串。

如果文件最后一行以換行符結尾,那么 $(tail filename -c 1) 的結果為空,test -n 命令會返回 1,也就是 false。

如果文件最后一行沒有以換行符結尾,那么 $(tail filename -c 1) 的結果不為空,test -n 命令會返回 0,也就是 true。

可以根據(jù)實際需要,改用 test -z 來判斷。如果文件最后一行以換行符結尾,$(tail filename -c 1) 的結果為空,test -z 命令會返回 0,也就是 true。

到此這篇關于Bash技巧:把變量賦值為換行符,判斷文件是否以換行符結尾的文章就介紹到這了,更多相關變量賦值為換行符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • php去除換行符的方法小結(PHP_EOL變量的使用)

標簽:常州 隴南 淮南 黔南 河北 黔南 河池 通遼

巨人網(wǎng)絡通訊聲明:本文標題《Bash技巧:把變量賦值為換行符(判斷文件是否以換行符結尾)》,本文關鍵詞  Bash,技巧,把,變量,賦值,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Bash技巧:把變量賦值為換行符(判斷文件是否以換行符結尾)》相關的同類信息!
  • 本頁收集關于Bash技巧:把變量賦值為換行符(判斷文件是否以換行符結尾)的相關信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章
    主站蜘蛛池模板: 彭水| 绿春县| 虞城县| 洛扎县| 五家渠市| 彭水| 淳安县| 利津县| 榆林市| 大方县| 会昌县| 彭州市| 密山市| 太保市| 连山| 平江县| 阿拉善右旗| 托克逊县| 卫辉市| 高邮市| 九龙县| 井研县| 名山县| 台安县| 巴南区| 惠东县| 比如县| 丰城市| 亳州市| 盐城市| 酉阳| 鲁山县| 浮山县| 新营市| 三门县| 民县| 丹寨县| 麦盖提县| 潮安县| 三都| 蒲城县|