ネストされたループを書き込もうとしていますが、書き方がわかりません。おそらく私は間違った方向を見ていますが、私が書き込もうとしているのは次のとおりです。
declare -a bar=("alpha" "bravo" "charlie")
declare -a foo=("delta" "echo" "foxtrot" "golf")
declare -a subgroups=("bar" "foo")
それでは、サブグループを繰り返します(将来的にはもっとバー sおよびfoo sが来る)、そしてそれらの中には異なる数の要素を持つことができるのでそれらを繰り返す。
必要な出力は次のようになります:
group name: bar with group members: alpha bravo charlie
working on alpha of the bar group
working on bravo of the bar group
working on charlie of the bar group
group name: foo with group members: delta echo foxtrot golf
working on delta of the foo group
working on echo of the foo group
working on foxtrot of the foo group
working on golf of the foo group
私が書いたクローズコードはバーで失敗するようです およびfoo 配列と各セットの要素による拡張。
for group in "${subgroups[@]}"; do
lst=${!group}
echo "group name: ${group} with group members: ${!lst[@]}"
for element in "${!lst[@]}"; do
echo -en "\tworking on $element of the $group group\n"
done
done
そして、出力は次のとおりです。
group name: bar with group members: 0
working on 0 of the bar group
group name: foo with group members: 0
working on 0 of the foo group
承認された回答:
これはbash
でかなり一般的な問題です 、declare -n
を使用して名前参照を作成する必要がある配列内の配列を参照します。 。 -n
に続く名前 割り当てられた値へのnamerefとして機能します(=
の後) )。ここで、この変数をnameref属性で処理して、配列であるかのように展開し、以前と同様に完全に適切な引用符で囲まれた配列展開を実行します。
for group in "${subgroups[@]}"; do
declare -n lst="$group"
echo "group name: ${group} with group members: ${lst[@]}"
for element in "${lst[@]}"; do
echo -en "\tworking on $element of the $group group\n"
done
done
bash
に注意してください v4.3以降のnamerefのみをサポートします。古いバージョンおよびその他の回避策については、間接/参照変数の割り当て
Systemdユニットを別のユニットと一緒に停止します。作品を始めますか?
Linux – LinuxでCtrl-alt-delと/etc/init/control-alt-del.confを無効にする方法は?