
ご辛抱いただきありがとうございます。私は Linux 初心者で、cut コマンドの出力を解析する方法を理解するために助けが欲しかったのです。
それで、現在私は変数を持っています
x=$(discover nginx --human=nood | cut -f1,6)
私の出力はecho "$x
次のようなリストです
インスタンスID IPアドレス
私のプログラムでは、xの各行に対してforループを実行し、最初の変数と2番目の変数を別々に抽出したいと考えています。例:配列a[0] = instanceID、a[1] = IPAdderessの場合
要素を個別に抽出する方法を教えてください。ループを実行して$x
その中でカットを実行できることはわかっていますが、それを実行するより良い方法があるかどうかを知りたいと思っています。
答え1
そのためには、データを変数に格納する必要はまったくなく、出力をループするだけdiscover
で済みます。
discover nginx --human=nood | cut -f 1,6 |
while read -r instanceID IPAddress; do
# Use "$instanceID" and "$IPAddress" here
done
あるいは、bash
プロセス置換を理解するシェル(<( ... )
)では、次のようになります。
while read -r instanceID IPAddress; do
# Use "$instanceID" and "$IPAddress" here
done < <( discover nginx --human=nood | cut -f 1,6 )
これら2つの違いは、何らかの変数の値を持ちたい場合にのみ明らかになります。ループから外れて最初の例では、ループはサブシェル内で実行されるため、ループ内で設定された変数の値は使用されません。後ループ(独自のローカル環境に存在します)。
discover
2 番目の例では、サブシェルは使用されません (およびを使用してプロセス置換を実行するものを除くcut
)。そのため、変数の値はループ後にアクセスできます。