
本質的に、シェルコマンド出力の特定の部分を複数の変数に割り当てようとしているのですが、どうすればいいのかわかりません。
単純化のために、シェルのコマンドが実行されると印刷されると仮定します。
one two three four
シミュレーションを使用できます。
echo "one two three four"
(実際の命令は異なるが)
今、私は出力の2番目と4番目の単語を割り当てたいです(この場合二つそして4つ)を変数としてw1そしてw2。
使えると思います。読む次のようにコマンドします。
echo "one two three four" | awk '{print $2 " " $4}' | read w1 w2
しかし、これはうまくいきません。おそらく読むコマンドは子プロセスで実行されます。
それでは、私が望むことをどのように達成できますか?
答え1
これはread
、子プロセスで実行され、親プロセスの環境に影響を与えることができないため、機能しません。
いくつかのオプションがあります。
コマンドを次のように変換できます。
w1=$(echo "one two three four" | awk '{print $2}')
w2=$(echo "one two three four" | awk '{print $4}')
またはIFSを変更し、次を使用しますset
。
OIFS="$IFS"
IFS=' '
set -- $(echo "one two three four" | awk '{print $2" "$4}')
IFS="$OIFS"
w1=$1 w2=$2
または文字列は次のようになります。
read w1 w2 w3 w4 <<< "one two three four"
答え2
この例では、Password.txt ファイルからパスワード 1 と 2 を取得します。
パスワード.txt
パスワード1:パスワード2:パスワード3:listjnAKcxu7tyLa7DJa:nn53tSnuJJxmYbEN:97m8crLrF3ap9y9R:パスワードリスト
ジェニー:37ゾーン:40
read pass1 pass2 <<< $(awk -F: '/listpassword/{ print $1,$2; }' password.txt)