shell中特殊變量IFS的使用
IFS是
內部字段分隔符(internal field separator)。默認情況下,bash shell會將空格、制表符、換行符 當做字段分隔符。
IFS=$'\n':;" 就是
將換行符、冒號、分號、雙引號作為字段分隔符
IFS='\n'
//將字符\和字符n作為IFS的換行符。
IFS=$'\n'
//真正的使用換行符做為字段分隔符。
IFS='\n':;"
//將反斜杠、n、冒號、分號和雙引號作為字段分隔符。
shell 將字符串分割為數組
1.使用內置的分割符IFS
str="192.168.31.65" OLD_IFS="$IFS" #保存舊的分隔符 IFS="." array=($str) IFS="$OLD_IFS" # 將IFS恢復成原來的 for i in "${!array[@]}"; do echo "$i=>${array[i]}" done
2.使用字符串替換然后構造數組
str="192.168.31.65" array=(${str//\./ }) for i in "${!array[@]}"; do echo "$i=>${array[i]}" done
shell 遍歷行的輸出結果
對於命令行輸出的結果,如果要遍歷,一般都是用for循環遍歷,具體語法為:
for line in `ls`;do #do something done
對於ls這類語句的輸出結果,在遍歷時會調用系統默認的分隔符(IFS=" ")。ls這類命令的結果實際是在一行,按照空格進行分割的話,如上語法就OK了。
往往有時候是需要對命令行輸出結果按行遍歷的,如:
for line in `ls -lrt`;do #dosomething done
按照ls -lrt遍歷文件的屬性,此時直接這樣就會發現分隔符還是用空格就不行了,這個時候,應該用如下方式:
oldifs="$IFS" IFS=$'\n' for line in `ls -lrt`;do #dosomething done IFS="$oldifs"
如上所示是先把老的分隔符給保留到中間變量中,然后替換默認分隔符為換行符,再執行遍歷,此時for遍歷的時候就會按行遍歷,最后執行完畢后再把系統分隔符給還原。