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。Iam\na\nmultilinestring 將被列印

我們只將 IFS 設定為換行符:

IFS=$'\n'
...

現在 fun 將執行如下:

fun 'I am' a 'multiline string'

$var 分為 3 個 args。I amamultiline string 將被列印

讓我們看看如果我們將 IFS 設定為 nullstring 會發生什麼:

IFS=
...

這次 fun 將執行如下:

fun 'I am
a
multiline string'

$var 沒有分裂,即它仍然是一個 arg。

你可以通過將 IFS 設定為 nullstring 來防止分詞

防止分詞的一般方法是使用雙引號:

fun "$var"

在上面討論的所有情況下都會阻止分詞,即 fun 函式只用一個引數執行。