0

サブシェルに入らずに多数の行を解析する必要があります

cat << EOF | while read -r cmd
sleep 100
sleep 110
sleep 120
EOF

do
    echo $cmd
done

結果は次のとおりです。

sleep 100
sleep 110
sleep 120

それは機能していますが、問題はサブシェルの外側で結果が必要であることです(後で結果が必要になるため)、whileの代わりにforを試しましたが、行ではなく単語を解析しません:

for cmd in `cat << EOF
sleep 100
sleep 110
sleep 120
EOF`

do
  echo $cmd
done

結果は次のとおりです。

sleep
100
sleep
110
sleep
120

それで、それを行う方法はありますか?

4

1 に答える 1

1
while read -r cmd; do
   echo $cmd
done <<EOF
sleep 100
sleep 110
sleep 120
EOF

パイプはサブシェルを作成します。I/O リダイレクト (ヒアドキュメントを含む) はそうではありません。

于 2012-06-06T14:43:39.657 に答える