所以我正在测试以下内容:
foo() {
printf "\nAll the parameters, each on a separate line:\n"
printf "param: %s\n" "$@"
}
foo The "nicely colored" rainbow
输出是:
All the parameters:
param: The
param: nicely colored
param: rainbow
因此,如果我理解正确,因为IFS
设置为\t\n
我们会得到由制表符分隔的参数( 的第一个字符IFS
)。
但为什么它们要分行打印呢?
printf 是针对每个参数运行的。即 bash 是否将其转换为 for 循环?
以下(不带双引号)也输出相同的结果:
printf "param: %s\n" $@
答案1
这里发生的情况是,当您传递的printf
参数多于它的位置格式参数(%s
和其他内容)时,它将重复该格式。它会在多行上重复它,因为您\n
的格式字符串中有。在这种情况下没有什么特别的$@
。
例如:
$ printf 'Foo: %s\n' bar baz
Foo: bar
Foo: baz
$ printf 'Foo: %s %s\n' bar baz
Foo: bar baz