分类:
2008-07-24 01:33:03
Bash中word splitting使用到的IFS的使用
部分内容转自:
还有一个好帖子:
1) shell command line 主要是要將整行 line 給 break down 每一個詞(word)。
2) 而詞與詞之區隔符號就是 IFS 。
3) shell 會對 command line 作處理(如提換、quoting、等),完成後再按詞重組。注:別忘了這個"重組"特性。
4) 當你用 IFS 來開頭讀進一個變量值,那,shell 會先整理出這個詞,然後再"重組" command line 。
5) 然而,你將 IFS 換成其他,那 shell 將視你那些 space/tab 為"詞",而不是 IFS 。那在重組時,你可得到這些"詞"。
若你不能理解,那來個簡單實驗看看或可理解:
noet1:這裡是用 soft quoting 將裡面的 space 關閉,使之不是 metat(IFS),而是一個 literal(white space)。
下面讲述IFS=;和IFS=";"的区别,即前者是将IFS置为null后者是将IFS置为;字符
只是,後面的問題(含前面),是出在 IFS=; 上。
因為這個 ; 在當前的 command line 上是一個 meta ,並非" ; "符號本身。
因此 IFS=; 是將 IFS 設為 null charactor (不是 space, tab, newline)。
要不要試試:
note2: 要關閉 ; 可用 ";" 或 ';' 或 \; 。