shell中的特殊變數IFS

2021-08-22 11:51:08 字數 858 閱讀 5239

當我越來越習慣python的編寫風格時,我經常會想用bash去遍歷乙個檔案的行,並將讀取的行進行處理。

但乙個詭異的情況,如果我的文字類似於這樣

the first line.

the second line.

the third line.

for line in `cat filename`

doecho $line

done

當我通過上面的方式遍歷檔案的每一行,我發現讀出來的資料是這樣的:

thefirst

line.

thesecond

line.

thethird

line.

很明顯,bash並沒有按照我的想法將換行符作為一行的分隔符,而是將空格作為了分隔符。這當然不是我希望的結果,對此我百思不得其解。

直到某一天我偶然看到了乙個關於shell的系統變數——ifs。

關於fs,經常awk的都不陌生,awk中有rs,ors,fs,ofs 4個可以定義分隔符的變數。而shell中的ifs同樣也是來定義分隔符的。

如果想要達到我想要的效果,那麼只需要將ifs賦值為分隔符即可。但有這裡就比較講究了,所以引出乙個問題

ifs='\n'

ifs=$"\n"

ifs=$'\n'

這三個賦值看起來都比較像」將換行符賦值給ifs「,但實際上只有最後一種寫法才是我想要的結果。

ifs=『\n』  //將字元n作為ifs的換行符。

ifs=$"\n" //這裡\n確實通過$轉化為了換行符,但僅當被解釋時(或被執行時)才被轉化為換行符。

ifs=$'\n' //這才是真正的換行符。

Shell中的特殊變數

感謝csdn社群 linux系統維護與使用區 板塊熱心朋友們的解答,我搞清楚了shell中特殊符號的使用,現在把總結分享一下 1.傳遞到指令碼的引數個數 2.以乙個單字串顯示所有向指令碼傳遞的引數。與位置變數不同,此選項引數可超過9個 3.當前shell的pid 4.後台執行的最後乙個程序的程序id...

shell中的特殊變數

1 表示上乙個命令退出的狀態 示例 root localhost shell echo 0 root localhost shell readonly a ac root localhost shell unset a bash unset a cannot unset readonly varia...

Shell中的特殊變數

變數 含義備註 0 當前指令碼的檔名 也就是命令的第乙個位置 n 第n個位置引數 例如 test.sh zcc yyds 0代表.test.sh,1代表zcc,2代表yyds 引數的個數 上乙個例子中引數個數為2 傳遞的所有引數 即上個例子的 1 2 傳遞的所有引數 和 不同在於 如果它們在 內,那...