여러 변수 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