同僚は、データファイルから個々の単語(ユーザー名)のリストを生成し、リストを繰り返し(forループで)、各単語に対して追加のコマンドを実行するシェルスクリプトの作成を支援するように依頼しました。このユーザー名。
スクリプトは期待どおりの出力を生成せず、いくつかのデバッグエコーステートメント(それぞれforループが処理するリストと現在の値を出力します)を置いた後、次のようになります(Becomeを使用するとこれは驚くべきことではないようです)。 1grep
行の複数の単語文字列が必要な(?)ではなく、各単語が別々の行に分割された単一の単語の文字列です。for
(奇妙なことに、forループの後続の出力のいくつかは期待どおりに毎回「現在の」ユーザー名の値を使用しているようですが、他の部分は毎回リストの最初の値を使用しているようです(おそらくリストには実際には複数の値が含まれています)単一行ではなく複数行で構成されます。
リストは以下によって生成されます。
OQLIST=`grep "*" ${QCHECK_FILE} | gawk -F " " '{print $1}'`
forループの構文は次のとおりです。
for OQUSER in ${OQLIST}; do
# various stuff
done
スクリプトが実行されています/bin/sh
(実際にはbash
そのシステムで)。私はいません。考えるbash
欠陥がある可能性がありますが、実際に必要に応じて動作する場合は問題ありません。
希望の方法でリスト値をforループに入れる方法はありますか?それとも値を繰り返すより適切な方法がありますか?