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