IFS全拼爲:Internal Field Separator. 它有三個需要記住的特點:
- IFS 是一個特殊的Shell變量
- 如果需要,你可以改變IFS的值,跟普通的變量賦值一樣。e.g. IFS='|'
- IFS的默認值是<space><tab><newline>, 即空格,製表符,空行
在我們平常使用中,有兩個很重要的地方會用到IFS,可能大家並沒有察覺。
- 在read命令中的使用
--- read直接讀的時候。read會把所有的分隔符換成空格。>IFS=:; read a lei:yu >echo $a lei yu
下面是一個例子,創建一個文件名字爲test.tmp,並寫入以下信息。>echo "leiyu|20|female" > test.tmp >echo "xyz|19|male" >> test.tmp
#!/bin/bash while IFS='|' read -r name age gender do echo "$name is $age old. His(Her) gender is $gender" done < ./test.tmp
>chmod +x ./show_info.sh >./show_info.sh leiyu is 20 old. His(Her) gender is female xyz is 19 old. His(Her) gender is male
- 在參數傳遞中的使用
在運行shell文件的時候,有時候需要傳入參數,其實傳入的參數也跟這個IFS有關。下面的例子很好的說明了這個過程。創建./f.sh,下面是文件內容 #!/bin/bash IFS='|' echo "$*" # 一個用IFS拼起來的字符串 echo "$@" # 一個數組 ================================ >chmod +x ./f.sh >f.sh a b c d a|b|c|d a b c d
另外IFS還可以用在變量賦值的時候,如下設IFS爲c,則字符串中的c就會視作分隔符,"goodcmorning"被分隔成了good和morning,然後再組合起來賦值給var變量。
>IFS='c';var=goodcmorning;echo $var
good morning