기본 Bash 배열 질문

기본 Bash 배열 질문
#!/bin/bash
# query1.sh

numbers=(53 8 12 9 784 69)
echo ${numbers[3]} # <--- this echoes "9" to standard output.

number=numbers[3]
echo number # <--- this echoes "number" to stdout.
echo $number # <--- this echoes "numbers[3]" to stdout.
echo ... <--- ???

number이름이 지정된 변수를 에코 하고 "9"를 표준 출력으로 얻으려면 어떤 구문을 사용해야 합니까 ?

답변1

귀하의 질문은 다음과 같습니다.

number=numbers[3]

배열의 네 번째 요소는 numbers변수에 할당되지 않습니다 number. numbers[3]실제로는 의미가 없기 때문입니다 .

$ numbers=(53 8 12 9 784 69)
$ echo $numbers[3]
53[3]

배열 이름만 변수로 사용하면 실제로 사용되는 것은 배열의 첫 번째 요소( 53)입니다. 그래서 $numbers[3]그것은 53[3]. 당신이 원하는 것은 :

$ number=${numbers[3]}
$ echo $number
9

답변2

${!var}변수 간접 참조에 연산자를 사용해야 하는 경우는 다음과 같습니다 .

bash-4.4$ numbers=(53 8 12 9 784 69)
bash-4.4$ number=numbers[3]
bash-4.4$ echo "${!number}"
9

이에 상응하는 zsh것은 다음과 같습니다.

numbers=(53 8 12 9 784 69)
number=numbers[4]
echo ${(P)number}

( zsh배열 인덱싱은 대부분의 다른 쉘 및 쉘 도구와 마찬가지로 1부터 시작하므로 이를 사용 numbers[4]하여 네 번째 숫자를 얻을 수 있습니다).

배열의 네 번째 요소 값을 에 할당하려는 경우 , 또는 에서 할당 $number할 수 있습니다 . 이는 배열을 복사하기만 하면 됩니다 .number=$numbers[4]zshnumber=${numbers[3]}kshbashksh

답변3

변수를 선언할 때는 반드시 사용할 필요는 없지만 $사용할 때는 사용해야 합니다.

이렇게 할당하면 작동합니다. number=${numbers[3]}

관련 정보