値の有無の Bash スクリプトの配列

値の有無の Bash スクリプトの配列

いくつかの変数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

おすすめ記事