Blog:博客園 個人
翻譯自Looping Through a File that Contains Spaces – Bash for Loop
處理包含空格或特殊字符的檔案是每個使用Linux的人都應必須掌握的,本文我們將討論如何在帶有空格的檔案上使用for回圈,
測驗文本如下:
This line has spaces
these
do
not
現在,我們使用for回圈來迭代這個文本,當我們執行for回圈時,shell會看到第一行的空格,并假設每一行都是不同的迭代,
[root@test ~]# for i in $(cat test);do echo $i;done
This
line
has
spaces
these
do
not
IFS定義了在分隔單詞時用作分隔的字符或字符集,
維基百科:對于Unix作業系統的許多命令列解釋器(“shell”),內部欄位分隔符(簡稱IFS)是指一個變數,該變數定義用于將模式拆分為某些操作的標記的字符,
默認情況下,IFS(欄位分隔符)的值為<space><tab><newline>,因此,當shell看到第一行中的空格時,它將該行劃分為四個標記(四個單詞),
修改IFS的值來滿足我們的需求
IFS是一個環境變數,在更改環境變數之前,最好的做法是保存它們的內容,這樣就可以輕松地將它們設定為默認值,
首先,我們先將IFS變數的值保存到OLDIFS中,
OLDIFS=$IFS
我們可以手動設定IFS成任何我們想要的值,在這種情況下,我們需要將欄位分隔符作為換行符,我們可以像任何變數一樣設定IFS,
IFS=<our value>
要將IFS設定為換行符,我們可以使用命令替換從echo命令獲取換行符輸出,
IFS=`echo -e "\n"`
echo -e "\n"的輸出是一個換行符,用于反引號封裝,將shell命令的輸出作為變數IFS,
現在,當我們執行相同的for回圈時,shell將通過換行符來分隔文本,
[root@test ~]# for i in $(cat test); do echo $i; done
This line has spaces
these
do
not
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/273098.html
標籤:其他
