【发布时间】:2016-04-27 10:01:33
【问题描述】:
我知道我可以像这样直接将参数传递到环境中:
parameter=<em>value</em> command
但是,正如我所料,它在以下情况下不起作用:
func()
{
for char in a b c
do
echo $char
done
}
while IFS= read line
do
echo "char: $line"
done <<< $(func)
这有输出:
char: a b c
一旦我这样做:
IFS=
while read line
do
echo "char: $line"
done <<< $(func)
它工作得很好。输出是:
char: a
char: b
char: c
但是,我必须重置我的 IFS 参数,我想绕过它。我想知道这背后的原因。
我用GNU bash, version 4.3.42(1)-release (x86_64-apple-darwin15.0.0)
【问题讨论】:
-
双引号命令子例如
"$(func)"并且根本不更改 IFS。 -
哇,这太简单了。非常感谢。而且我理解它为什么起作用,但我仍然非常想了解,为什么
IFS= read不起作用。你有什么想法吗? -
IFS 仅限于循环,不影响
-
好的,有道理,谢谢
-
IFS在这里根本不需要,如果你回显 $line 管道到sed
标签: bash shell parameters parameter-passing