shell中的特殊變量IFS


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遍歷的時候就會按行遍歷,最后執行完畢后再把系統分隔符給還原。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM