command `< file`
ファイルの内容を標準入力のコマンドに渡しますが、改行を削除します。つまり、各行を個別に反復処理できませんでした。そのために、「for」ループを含むスクリプトを作成できます:
for line in `cat input_file`; do some_command "$line"; done
または (複数行バリアント):
for line in `cat input_file`
do
some_command "$line"
done
または ($()
の複数行バリアント ``
の代わりに ):
for line in $(cat input_file)
do
some_command "$line"
done
参考文献:
<オール>
すでに述べたように、バッククォートまたは $(cat filename)
を使用できます .
言及されていないこと、および注意することが重要だと思うのは、シェルがそのファイルの内容を空白に従って分割し、見つかった各「単語」をコマンドに引数として与えることを覚えておく必要があるということです。また、空白やエスケープ シーケンスなどを含めることができるようにコマンド ライン引数を引用符で囲むことはできますが、ファイルからの読み取りでは同じことはできません。たとえば、ファイルに以下が含まれているとします:
a "b c" d
取得する引数は次のとおりです:
a
"b
c"
d
各行を引数としてプルしたい場合は、while/read/do コンストラクトを使用してください:
while read i ; do command_name $i ; done < filename
バッククォートを使用してそれを行います:
echo World > file.txt
echo Hello `cat file.txt`
シェルが (特に) bash の場合、$(cat afile)
のショートカット $(< afile)
です 、したがって、次のように記述します:
mycommand "$(< file.txt)"
「コマンド置換」セクションの bash man ページに記載されています。
または、コマンドを stdin から読み取るようにします:mycommand < file.txt