shell中的特殊變數IFS

來源:互聯網
上載者:User

標籤:

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

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

the first line.
the second line.
the third line.

for line in `cat filename`doecho $linedone

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

the
first
line.
the
second
line.
the
third
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中的特殊變數IFS

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.