GNU/Linux >> Linux の 問題 >  >> Linux

パイプからシェル変数に値を読み込む

これは別のオプションです

$ 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.


Linux
  1. Linux bash:複数の変数の割り当て

  2. 変換のために文字列を GNU Date にパイプします - stdin から読み取るにはどうすればよいですか?

  3. 猫の出力を変数に保存すると、すべての改行が削除されます

  1. ループはバックグラウンドのサブシェルからの変数変換を無視しますか?

  2. スクリプト内の bash シェル スクリプトおよび関数の変数スコープ

  3. Shell =変数が#で始まるかどうかを確認します

  1. シェルパイプを介してCsvデータをSqliteテーブルに挿入する方法は?

  2. ファイルから変数を読み取る方法は?

  3. 現在のgitブランチの名前をシェルスクリプトの変数に取得する方法は?