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

적절한 2D 배열이 필요하고 쉘 대신 적절한 프로그래밍 언어를 사용하고 싶을 수도 있습니다... 일부 해결 방법은 Something과 같은 키가 있는 연관 배열을 사용하는 것일 수 있습니다. 2-3둘 다 일부 문자열로 인덱싱됩니다. 하지만 실제로 무엇을 하고 있는지에 따라 다릅니다.

(후자의 코드 조각에서는 인덱스를 사용하지 않습니다. ( 값만 할당했더라도 에서 인덱스를 사용하는 $c것과 동일합니다 .)${c[0]}EMPTY

관련 정보