forループオブジェクトに対するBASH操作

forループオブジェクトに対するBASH操作

forloopオブジェクトに対してbashコマンドを実行しようとしていますが、forloopオブジェクトを使用する代わりにファイルを見つけようとします。

例:

入力ファイルには、次の形式の行が含まれています。user:password

for item in $(cat myItems);do
        USER = cat $item | cut -d ":" -f1
        PASS = cat $item | cut -d ":" -f2
done

結果は$ itemファイルが見つからないことです。

私も試しました

for item in $(cat myItems);do
        USER = $(cat $item | cut -d ":" -f1)
        PASS = $(cat $item | cut -d ":" -f2)
done

答え1

ファイルの各行に対していくつかのコマンドを実行する必要がある場合は、次のように書くことができます。

while IFS=: read -r user password rest_ignored; do
  something with "$user" and "$password"
done < myItems

catvar=valueは、割り当て構文の周囲にスペースを入れずにファイルをリンクするコマンドです=$(...)改行でコマンド出力を分割することは可能ですが、正しく設定して$IFSワイルドカードを無効にした場合にのみ可能です。

答え2

これはあなたが望むことを達成し、もともと望んでいたスクリプトアプローチを維持するようです。

$ cat myItems
user:pass
user2:pass2
$ for item in $(cat myItems);do
    USER=$(echo $item | cut -d ":" -f1)
    PASS=$(echo $item | cut -d ":" -f2)
    echo user $USER pass $PASS
done
user user pass pass
user user2 pass pass2
$

関連情報