이 배열 관련 코드는 왜 각 줄의 끝에 인덱스를 인쇄합니까?

이 배열 관련 코드는 왜 각 줄의 끝에 인덱스를 인쇄합니까?

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.zshKSH_ARRAYS

관련 정보