これは別のオプションです
$ read test < <(echo hello world)
$ echo $test
hello world
大量のデータを読み込んで各行を個別に処理したい場合は、次のようなものを使用できます:
cat myFile | while read x ; do echo $x ; done
行を複数の単語に分割したい場合は、次のように x の代わりに複数の変数を使用できます:
cat myFile | while read x y ; do echo $y $x ; done
または:
while read x y ; do echo $y $x ; done < myFile
しかし、この種のことで本当に賢いことをしたいと思ったらすぐに、次のようなことを試すことができる perl のようなスクリプト言語を使用することをお勧めします:
perl -ane 'print "$F[0]\n"' < myFile
perl (またはこれらの言語のいずれかと推測します) の学習曲線はかなり急ですが、最も単純なスクリプト以外を実行したい場合は、長い目で見ればはるかに簡単であることがわかります。 Perl Cookbook をお勧めします。もちろん、Larry Wall らによる The Perl Programming Language もお勧めします。
使う
IFS= read var << EOF
$(foo)
EOF
できます トリック read
次のようなパイプから受け入れます:
echo "hello world" | { read test; echo test=$test; }
または、次のような関数を書くこともできます:
read_from_pipe() { read "[email protected]" <&0; }
しかし、意味がありません。変数の割り当てが持続しない可能性があります。パイプラインは、環境が参照ではなく値によって継承されるサブシェルを生成する場合があります。これが read
の理由です パイプからの入力を気にしません - それは未定義です.
参考までに、http://www.etalabs.net/sh_tricks.html は、ボーン シェルの奇妙さや非互換性と戦うために必要なクラフトの気の利いたコレクションです、sh.