各ループ反復でコマンド出力を別の変数に割り当てるにはどうすればよいですか?

各ループ反復でコマンド出力を別の変数に割り当てるにはどうすればよいですか?

次のスクリプトがあります。

for chain in http https ssh
do
 iptables -nvxL $chain | tail -1 | awk '{print $2}'
done

しかし、私が本当に望むのは、iptables各反復のコマンド出力を異なる変数としてキャプチャすることです。名前現在の値と同じでなければなりませんchain

したがって、最初のループ反復(ここでは)の場合は、$chain次のhttpようになりたいと思います。

http=$(iptables -nvxL http | tail -1 | awk '{print $2}')

次に私はこれが欲しい:

https=$(iptables -nvxL https | tail -1 | awk '{print $2}')

アイデアを得たことを願っていますが、どうすればいいかわかりません。

ベストアンサー1

あなたの場合は、連想配列を使用します。

declare -A rules

for chain in http https ssh
do
   rules[$chain]=$(iptables -nvxL $chain | tail -1 | awk '{print $2}')
done

その後、次のように出力を逆参照して出力にアクセスできます。

printf -- "%s\n" "${rules['http']}"

または

for chain in http https ssh
do
    printf -- "%s\n" "${rules[$chain]}"
done

おすすめ記事