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 函数只用一个参数执行。