
いくつかの変数a、b、cがあります。
forループですべての値を表示したいです。
for i in ${!a[@]}; do
echo "${a[$i]} ${b[$i]} ${c[$i]}"
done
変数cの他の値は意図的に空白のままになったので、その値は一番上に移動しました。
mammals land elephant
reptile water pigeon
birds air
値が変更されないように空の変数を作成するには?
私はこれを試しましたが、文字列が「ウォーター」と一致する場合、aとbだけをエコーします。
for i in ${!a[@]}; do
if [ "$c" = "water"]; then
echo "${a[$i]} ${b[$i]}"
else
echo "${a[$i]} ${b[$i]} ${c[$i]}"
fi
done
答え1
このようなものをお探しですか?
a=("" b c)
b=(d "" f)
c=(g h "")
for i in ${!a[@]}; do
printf "%s\t" "${a[$i]}" "${b[$i]}" "${c[$i]}"
echo
done
出力は次のとおりです
$ bash arr.sh
d g
b h
c f
斜めに「欠けている」値を表示するために空の文字列を使用します。複合割り当てではインデックスをスキップできません。インデックスに何かがあるはずです。もちろん、割り当てられていない状態を使用してa[1]=b a[2]=c
維持することa[0]
も、割り当てられていない状態を明示的に使用して維持することもできますunset a[0]
。
適切な2D配列が必要で、シェルの代わりに適切なプログラミング言語を使用したい場合があります...いくつかの回避策は、Somethingなどのキーを持つ連想配列を使用することです。2-3
両方ともいくつかの文字列で索引付けされます。しかし、実際に何をしているかによって異なります。
(後者のコードスニペットではインデックスを使用しません$c
。${c[0]}
EMPTY