複合コマンドの前にリダイレクト入力を指定できますか?

複合コマンドの前にリダイレクト入力を指定できますか?

Bashを使用すると、コマンドの前にリダイレクトされた入力を指定できます。

$ <lines sed 's/^/line: /g'
line: foo
line: bar

whileBashを使用すると、ループなどの複合コマンドで入力をリダイレクトすることもできます。

$ while read line; do echo "line: $line"; done <lines
line: foo
line: bar

ただし、ループの前にリダイレクト入力を指定しようとすると、while構文エラーが発生します。

$ <lines while read line; do echo "line: $line"; done
bash: syntax error near unexpected token `do'

これは何の問題ですか? Bashで複合コマンドの前にリダイレクトされた入力を指定できませんか?それではなぜならないのですか?

ベストアンサー1

man bash説明する:

...リダイレクト演算子は、式の前後にどこにでも表示できます。簡単なコマンドまたは、コマンドに従うこともできます。

while単純なコマンドではありません。

おすすめ記事