#!/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]
zsh
number=${numbers[3]}
ksh
bash
ksh
답변3
변수를 선언할 때는 반드시 사용할 필요는 없지만 $
사용할 때는 사용해야 합니다.
이렇게 할당하면 작동합니다.
number=${numbers[3]}