![이 배열 관련 코드는 왜 각 줄의 끝에 인덱스를 인쇄합니까?](https://linux55.com/image/66469/%EC%9D%B4%20%EB%B0%B0%EC%97%B4%20%EA%B4%80%EB%A0%A8%20%EC%BD%94%EB%93%9C%EB%8A%94%20%EC%99%9C%20%EA%B0%81%20%EC%A4%84%EC%9D%98%20%EB%81%9D%EC%97%90%20%EC%9D%B8%EB%8D%B1%EC%8A%A4%EB%A5%BC%20%EC%9D%B8%EC%87%84%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
BASH에서 배열을 사용하는 데 문제가 있습니다. 문제를 다음 코드로 단순화했습니다.
#! /bin/bash
A1[0]="user1 user2 user3"
A1[1]="user4 user5 user6"
for each in ${!A1[*]}
do
echo -n "$each "
echo $A1[$each]
done
출력은 다음과 같습니다.
0 user1 user2 user3[0]
1 user1 user2 user3[1]
왜 모든 줄에 [X](아마도 배열 요소를 나타냄)가 있는지 이해할 수 없습니다. 인덱스를 추가하지 않고 배열에서 인덱스 및 데이터 행을 복구하는 방법은 무엇입니까?
답변1
* 에서는 bash
다음과 같이 중괄호를 사용해야 합니다.
echo ${A1[$each]}
[$each]
배열에 첨자를 추가합니다 A1
.
1인당 치명타(1):
${name[subscript]}를 사용하여 배열의 모든 요소를 참조할 수 있습니다. 경로 이름 확장과의 충돌을 방지하려면 중괄호가 필요합니다.
계속하자:
첨자 없이 배열 변수를 참조하는 것은 첨자 0이 있는 배열을 참조하는 것과 같습니다.
이것이 바로 원본 코드가 작동하지 않는 이유입니다. 중괄호를 사용하는 경우에만 쉘이 아래 첨자를 보기 때문입니다.
그래서
echo $A1[$each]
동등하다
echo ${A1[0]}[$each]
대괄호는 특별한 의미가 없으므로 그대로 출력됩니다.
- 이 옵션이 설정된 경우
ksh
.zsh
KSH_ARRAYS