最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年08月18日 17:21:47   作者:南木閣  
這篇文章主要介紹了Bash技巧:把變量賦值為換行符,判斷文件是否以換行符結(jié)尾,需要的朋友可以參考下

變量賦值為換行符

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

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

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

這是 bash 和 C 語(yǔ)言不一樣的地方。
在 C 語(yǔ)言中,'n' 對(duì)應(yīng)換行符自身,只有一個(gè)字符;而 "n" 對(duì)應(yīng)一個(gè)字符串。
但是在 bash 中,'n' 也是對(duì)應(yīng)一個(gè)字符串。

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

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' 這個(gè)寫法可以使用 C 語(yǔ)言的轉(zhuǎn)義字符來(lái)獲取到對(duì)應(yīng)的字符自身。

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

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

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

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

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

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

查看 man tail 對(duì) -c 選項(xiàng)的說(shuō)明如下:

-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 命令指定獲取所給文件的最后一個(gè)字符。

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

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

所以當(dāng)文件的最后一行以換行符結(jié)尾時(shí),$(tail filename -c 1) 命令替換會(huì)去掉獲取到的換行符,最終結(jié)果為空,并不會(huì)返回?fù)Q行符自身。

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

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)過(guò)命令替換后,會(huì)去掉末尾的換行符。

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

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

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

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

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

相關(guān)文章

  • linux 查看端口占用命令實(shí)例詳解

    linux 查看端口占用命令實(shí)例詳解

    這篇文章主要介紹了 linux 查看端口占用命令實(shí)例詳解的相關(guān)資料,教大家怎樣查看系統(tǒng)端口占用情況,需要的朋友可以參考下
    2017-07-07
  • 淺析Linux常用文件管理命令

    淺析Linux常用文件管理命令

    這篇文章主要介紹了Linux常用文件管理命令,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-04-04
  • 一天一個(gè)shell命令 linux好管家-進(jìn)程-ps命令詳解

    一天一個(gè)shell命令 linux好管家-進(jìn)程-ps命令詳解

    這篇文章主要介紹了一天一個(gè)shell命令 linux好管家-進(jìn)程-ps命令詳解 ,需要的朋友可以參考下
    2016-06-06
  • find命令的結(jié)果順序是什么

    find命令的結(jié)果順序是什么

    這篇文章主要介紹了find命令的結(jié)果順序是什么,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • linux 使用NSF 映射遠(yuǎn)程磁盤目錄的實(shí)現(xiàn)

    linux 使用NSF 映射遠(yuǎn)程磁盤目錄的實(shí)現(xiàn)

    下面小編就為大家?guī)?lái)一篇linux 使用NSF 映射遠(yuǎn)程磁盤目錄的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • Shell 命令執(zhí)行順序分析[圖]

    Shell 命令執(zhí)行順序分析[圖]

    Shell 從標(biāo)準(zhǔn)輸入或腳本中讀取的每一行稱為管道(pipeline);它包含了一個(gè)或多個(gè)命令(command),這些命令被一個(gè)或多個(gè)管道字符(|)隔開
    2013-01-01
  • Shell腳步攻略之管道重定向基礎(chǔ)

    Shell腳步攻略之管道重定向基礎(chǔ)

    管道是為了解決進(jìn)程間通信問題而存在,它可以讓兩個(gè)進(jìn)程之間的數(shù)據(jù)進(jìn)行傳遞,將一個(gè)進(jìn)程的輸出數(shù)據(jù)傳遞給另一個(gè)進(jìn)程作為其輸入數(shù)據(jù)
    2017-08-08
  • Linux shell中如何獲取當(dāng)前目錄

    Linux shell中如何獲取當(dāng)前目錄

    這篇文章主要介紹了Linux shell中如何獲取當(dāng)前目錄問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • shell耗時(shí)計(jì)算的實(shí)現(xiàn)

    shell耗時(shí)計(jì)算的實(shí)現(xiàn)

    本文主要介紹了shell耗時(shí)計(jì)算的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • linux bash字符串處理大全

    linux bash字符串處理大全

    linux bash字符串處理大全,需要的朋友可以參考下
    2013-02-02

最新評(píng)論

万盛区| 南安市| 黎川县| 包头市| 西林县| 昌宁县| 柳州市| 明光市| 喀什市| 射洪县| 东乌| 湄潭县| 黔西县| 含山县| 武安市| 三亚市| 阜宁县| 青海省| 景谷| 吉木萨尔县| 兴和县| 贡觉县| 安图县| 湘阴县| 喜德县| 固阳县| 赤城县| 安平县| 藁城市| 宁河县| 明星| 乌兰浩特市| 大名县| 宜良县| 阳谷县| 星座| 沙湾县| 宁明县| 西乌珠穆沁旗| 永福县| 凌海市|