Catコマンドからの各行に対してコマンドを実行しようとしています。これは、ベンダーから入手したサンプルコードに基づいています。
スクリプトは次のとおりです。
for tbl in 'cat /tmp/tables'
do
echo $tbl
done
そのため、出力がファイルの各行になることを期待していました。代わりに私はこれを取得しています:
cat
/tmp/tables
それは明らかに私が望んでいたことではありません。
エコーを、データベースとインターフェイスする実際のコマンドに置き換えます。
これを正すための助けをいただければ幸いです。
間違ったタイプの引用符を使用しています。
引数を実行中のプログラムにしてコンテンツをforループにパイプするには、一重引用符ではなく逆引用符を使用する必要があります。
for tbl in `cat /tmp/tables`
do
echo "$tbl"
done
また、読みやすさを向上させるために(bashを使用している場合)、次のように記述できます。
for tbl in $(cat /tmp/tables)
do
echo "$tbl"
done
各行を取得することが期待される場合(上記のforループで各単語が得られます)、次のようにxargs
を使用する方がよい場合があります。
cat /tmp/tables | xargs -L1 echo
またはループとして
cat /tmp/tables | while read line; do echo "$line"; done
whileループの場合:
while read line
do
echo "$line"
done < "file"
while IFS= read -r tbl; do echo "$tbl" ; done < /etc/tables
読む this 。
一重引用符はバッククォートである必要があります。
for tbl in `cat /etc/tables`
ただし、これでは、行ごとではなく、Wordごとに出力/入力が行われます。行ごとに処理するには、次のようなことを試してください。
cat /etc/tables | while read line
echo $line
done
たとえば、IFS(Input Field Seperator)を再定義することで、bashで多くの解析を行うことができます。
IFS="\t\n" # You must use double quotes for escape sequences.
for tbl in `cat /tmp/tables`
do
echo "$tbl"
done