什么时候和为什么

当 shell 执行参数扩展命令替换变量或算术扩展时,它会扫描结果中的字边界。如果找到任何单词边界,则结果将在该位置拆分为多个单词。单词边界由 shell 变量 IFS(内部字段分隔符)定义。IFS 的默认值是空格,制表符和换行符,即如果未明确禁止,则会在这三个空格字符上进行单词拆分。

set -x
var='I am
a
multiline string'
fun() {
    echo "-$1-"
    echo "*$2*"
    echo ".$3."
}
fun $var

在上面的例子中,这是 fun 函数的执行方式:

fun I am a multiline string

$var 分为 5 个 args,只打印 Iama