
몇 가지 변수 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