一 、IFS的介紹
Shell 腳本中有個變量叫IFS(Internal Field Seprator) ,內部域分隔符。完整定義是The shell uses the value stored in IFS, which is the space, tab, and newline characters by default, to delimit words for the read and set commands, when parsing output from command substitution, and when performing variable substitution.
Shell 的環境變量分為set, env 兩種,其中 set 變量可以通過 export 工具導入到 env 變量中。其中,set 是顯示設置shell變量,僅在本 shell 中有效;env 是顯示設置用戶環境變量 ,僅在當前會話中有效。換句話說,set 變量里包含了env 變量,但set變量不一定都是env 變量。這兩種變量不同之處在於變量的作用域不同。顯然,env 變量的作用域要大些,它可以在 subshell 中使用。
IFS 是一種 set 變量,當 shell 處理"命令替換"和"參數替換"時,shell 根據 IFS 的值,默認是 space, tab, newline 來拆解讀入的變量,然后對特殊字符進行處理,最后重新組合賦值給該變量。
二、 IFS的簡單實例
1 查看IFS的值
echo "$IFS"
echo "$IFS"|od -b
0000000 040 011 012 012
0000004
直接輸出IFS是看不到值的,轉化為二進制就可以看到了,"040"是空格,"011"是Tab,"012"是換行符"\n" 。最后一個 012 是因為 echo 默認是會換行的。
2 實際中的應用
#!/bin/bash
OLD_IFS=$IFS #保存原始值
IFS="" #改變IFS的值
...
...
IFS=$OLD_IFS #還原IFS的原始值