값이 있거나 없는 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

값이 이동되지 않도록 빈 변수를 만들려면 어떻게 해야 합니까?

문자열이 "water"와 일치하면 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]

적절한 2차원 배열이 필요합니다. 셸이 아닌 적절한 프로그래밍 언어를 사용하고 싶을 수도 있습니다. 일종의 해결 방법은 문자열 2-3로 구분된 두 인덱스를 사용하여 와 같은 키가 있는 연관 배열을 사용하는 것일 수 있습니다. 하지만 실제로 무엇을 하고 있는지에 따라 다릅니다.

(후자의 스니펫에서는 $c색인 없이 사용하고 있습니다( 와 동일한 값을 얻은 다음 하나의 값만 할당했음에도 불구하고 ${c[0]}에서 색인을 사용합니다 .)EMPTY

관련 정보