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

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

系統(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' 對應換行符自身,只有一個字符;而 "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: 

  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 語言的轉義字符來獲取到對應的字符自身。

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

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

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

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

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

tail 命令可以獲取文件末尾的內容。它的 -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) 命令替換來獲取內部命令的輸出結果時,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: 

  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.

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

由于 $(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。 

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

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轉換

2021-12-14 07:05:00

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

2011-08-11 18:19:32

col中文man

2009-09-02 17:19:43

C#換行連接符

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換行

2021-05-11 22:24:56

C++符號Tab

2022-03-08 09:09:08

Go塊讀取音視頻

2009-11-26 14:23:10

PHP正則模式修正符

2022-11-03 08:13:52

echo 命令Linux

2024-04-16 00:11:05

Python換行符測試

2010-01-18 10:34:21

C++編譯器

2010-01-07 18:32:38

JSON
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美在线视频免费 | 成人午夜激情 | 国产高清视频在线观看 | 亚洲天堂日韩精品 | 欧美中文字幕 | 欧美激情国产日韩精品一区18 | 欧美一区二区三区国产精品 | 国产精品美女久久久av超清 | 久久精品视频一区二区 | 久久精品日产第一区二区三区 | 亚洲国产情侣自拍 | 色本道 | 精品产国自在拍 | 国产视频一区二区三区四区五区 | 久久久区 | 一级毛片视频 | 国产精品1区| www国产成人免费观看视频,深夜成人网 | 亚洲视频二 | 免费a大片 | 亚洲一区 | 国产在线一区二区 | 91av视频在线免费观看 | 国产精品日韩欧美一区二区三区 | 欧美aⅴ在线观看 | 精品视频在线观看 | 一区二区三区中文字幕 | 成人免费观看网站 | 日韩一区二区在线观看 | 日韩精品成人一区二区三区视频 | 日本人爽p大片免费看 | 中文字幕国产 | 欧美在线a| 伊人影院99| 色99视频| 一区二区三区在线电影 | 伊色综合久久之综合久久 | 成人免费网站在线 | 中文字幕成人av | 成人免费一区二区 | 国产精品久久久久不卡 |