• ベストアンサー

パイプの後半をfor文にする

`コマンド` | for $1 in       do        `コマンド`       done としたいのですが、doからdoneの部分がうまくいかず 構文エラーになります。 パイプ以下を、{}でグルーピングしてもうまくいきません。 `コマンド` | { for $1 in       do        `コマンド`       done; } どうしたらうまくいくでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

やりたい事がわかりにくいんですが、 > `コマンド1`|for $1 in > do > `コマンド2` > done というのは、 「コマンド1の出力結果をループしてコマンド2を実行したい」 ということですか? ならば、パイプを使うのではなくて for i in `コマンド1` do `コマンド2` done だとおもいます。 例) for i in `ls *` do echo $i done

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

#1 でもいいけど, 最初のコマンドの標準出力をキャプチャしておきながら分解して for にわたすのはなんかもったいないので, 標準入力から変数に読み込む read を使って コマンド | while read line; do ~ done の方がいいかもしれない (この場合, 読み込んだ内容は変数 $line に入ります). for で in を使うときには, その後ろにリストが必須 (で do の前に for を区切る改行または ; が必要) です. リストを省略するときには in も省略しなければならず, その場合には in $argv と書いたのと同じになります.... $argv だっけ? シェルに対する引数だけど.

すると、全ての回答が全文表示されます。

関連するQ&A