1. ホーム
  2. linux

[解決済み】パイプからシェル変数に値を読み込む

2022-04-05 19:49:07

質問

私はbashにパイプで送られたstdinからのデータを処理させようとしていますが、うまくいきません。私が言いたいのは、以下のどれもが動作しないということです。

echo "hello world" | test=($(< /dev/stdin)); echo test=$test
test=

echo "hello world" | read test; echo test=$test
test=

echo "hello world" | test=`cat`; echo test=$test
test=

を出力させたい場所 test=hello world . を引用符で囲んでみました。 "$test" もうまくいきません。

解決方法は?

使用方法

IFS= read var << EOF
$(foo)
EOF

あなた できる トリック read のように、パイプから受け取るようにします。

echo "hello world" | { read test; echo test=$test; }

とか、こんな風に関数を書いてもいいんです。

read_from_pipe() { read "$@" <&0; }

しかし、それでは意味がない。変数の割り当てが長続きしないかもしれないのだ。パイプラインはサブシェルを生成し、そこで環境は参照ではなく値で継承されることがあります。そのため read はパイプからの入力に悩まされることはありません。

ご参考までに。 http://www.etalabs.net/sh_tricks.html は、ボーンシェルの奇妙さと非互換性に対抗するために必要な粋なコレクション、shです。