成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

系統(tǒng) Linux
在 bash 中,如果要把變量賦值為換行符,寫為 '\n' 沒有效果,需要寫為 $'\n'。一起來看看吧。

 [[338354]]

把變量賦值為換行符

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

  1. newline='\n'  
  2. $ echo $newline  
  3. \n  
  4. newline=$'\n'  
  5. $ echo $newline 

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

這是 bash 和 C 語言不一樣的地方。

在 C 語言中,'n' 對應(yīng)換行符自身,只有一個字符;而 "n" 對應(yīng)一個字符串。

但是在 bash 中,'n' 也是對應(yīng)一個字符串。

把 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: 

  1. \n     new line  
  2. \r     carriage return  
  3. \t     horizontal tab  
  4. \'     single quote 

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

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

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

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

  1. 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)部命令的輸出結(jié)果時,bash 會去掉末尾的換行符。

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

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

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

  1. $(command)  
  2. or  
  3. `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 來判斷最終結(jié)果是否為空字符串。

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

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

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

 

責任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2009-09-02 14:47:44

C#換行符

2009-09-03 15:50:20

C#回車換行符

2010-09-28 16:02:46

替換SQL字段

2011-01-26 11:19:55

Linux認證

2010-08-12 10:26:12

FlexXML

2021-10-19 07:27:08

Unix Dos轉(zhuǎn)換

2021-12-14 07:05:00

SQL語句數(shù)據(jù)庫

2009-09-02 17:19:43

C#換行連接符

2011-08-11 18:19:32

col中文man

2017-10-24 14:13:56

Java正則表達式

2023-10-20 15:58:27

Python刪除指定字符

2009-09-02 14:30:35

C#換行符號

2009-07-06 15:23:18

JSP換行

2022-03-08 09:09:08

Go塊讀取音視頻

2021-05-11 22:24:56

C++符號Tab

2009-11-26 14:23:10

PHP正則模式修正符

2022-11-03 08:13:52

echo 命令Linux

2010-01-18 10:34:21

C++編譯器

2010-01-07 18:32:38

JSON

2024-04-16 00:11:05

Python換行符測試
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲综合天堂 | 国产目拍亚洲精品99久久精品 | 久久伊人精品 | 天堂在线1| 精彩视频一区二区三区 | 午夜精品一区二区三区在线视频 | 亚洲自拍偷拍av | 观看av | 荷兰欧美一级毛片 | 精品久久一区 | 婷婷丁香在线视频 | 色视频在线免费观看 | 天天躁天天操 | 国产97色| 日韩一区二区三区在线观看 | 每日在线更新av | 午夜免费网站 | 中文字幕免费中文 | 精品在线一区 | 爱爱视频在线观看 | 美女黄色在线观看 | 国产精品一区二区在线免费观看 | 91在线免费视频 | 中文字幕视频在线免费 | 亚洲视频区 | 亚洲欧美中文日韩在线v日本 | 亚洲一区视频在线 | 精品久久久久久18免费网站 | 国产91一区 | 精品一区二区三区四区视频 | 午夜伊人 | 亚洲精品一区二区三区蜜桃久 | 精品久久久久久久久久久 | av一级久久 | 亚洲一二三视频 | 99免费在线观看视频 | 中文字幕视频在线观看 | 精品无码久久久久久久动漫 | 福利视频网址 | 2019天天干天天操 | 手机在线一区二区三区 |