【问题标题】:Bash: Passing parameters into environments of specific commandsBash:将参数传递到特定命令的环境中
【发布时间】: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


【解决方案1】:

这已在即将发布的 bash 的 4.4 版本中修复。

bash-4.4$ func()
> {
>     for char in a b c
>     do
>         echo $char
>     done
> }
bash-4.4$
bash-4.4$ while IFS= read line
> do
>     echo "char: $line"
> done <<< $(func)
char: a
char: b
char: c

使此处的字符串正常工作(即,如记录的那样)是一个持续的过程。

【讨论】:

  • 哇,我为自己在 bash 中发现了一个错误感到自豪,非常感谢!
猜你喜欢
  • 2018-04-21
  • 2021-11-25
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 2014-09-13
  • 2014-10-17
相关资源
最近更新 更多