IFS 分詞
如果你不瞭解 IFS 與分詞的關係,請檢視內容,時間和原因
我們只將 IFS 設定為空格字元:
set -x
var='I am
a
multiline string'
IFS=' '
fun() {
echo "-$1-"
echo "*$2*"
echo ".$3."
}
fun $var
這個時間分詞只適用於空格。fun
函式將執行如下:
fun I 'am
a
multiline' string
$var
分為 3 個 args。I
,am\na\nmultiline
和string
將被列印
我們只將 IFS 設定為換行符:
IFS=$'\n'
...
現在 fun
將執行如下:
fun 'I am' a 'multiline string'
$var
分為 3 個 args。I am
,a
,multiline string
將被列印
讓我們看看如果我們將 IFS 設定為 nullstring 會發生什麼:
IFS=
...
這次 fun
將執行如下:
fun 'I am
a
multiline string'
$var
沒有分裂,即它仍然是一個 arg。
你可以通過將 IFS 設定為 nullstring 來防止分詞
防止分詞的一般方法是使用雙引號:
fun "$var"
在上面討論的所有情況下都會阻止分詞,即 fun
函式只用一個引數執行。