12

私は次のシェルスクリプトを持っています:

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

これが 1 つのバージョンでしか機能しないのはなぜですか? それはバグですか、それとも追加機能ですか?

プロセスの置換は正常に機能しているようですが、ファイルのソース時に問題が発生しました。

これが予想される動作である場合source、異なる bash バージョン間で互換性を保つために、標準入力からの何かに代わりに使用する必要がある他の構文は何ですか?

4

1 に答える 1

18

これは、bash 3.2 の既知の制限です。これを回避するには:

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

...または、同様に:

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