12

我有以下 shell 脚本:

cat <(echo foo)
source <(echo bar=bar)
echo $bar

但是它在 GNU bash 3.2 和 4.3 中的工作方式不同,如下所示:

$ /bin/bash foo.sh 
foo

3.2.53(1)-release

$ /usr/local/bin/bash foo.sh 
foo
bar
4.3.33(1)-release

为什么这只适用于一个版本?这是一个错误还是添加的功能?

似乎流程替换工作正常,但是在获取文件时存在问题。

如果这是预期的行为,我应该使用什么其他语法来代替source标准输入中的内容以在不同的 bash 版本之间兼容?

4

1 回答 1

18

This is a known limitation in bash 3.2. To work around it:

source /dev/stdin <<<"$(echo bar=bar)"

...or, similarly:

source /dev/stdin <<<"$(cat <(...))"
于 2015-09-15T22:18:27.223 回答