Bash 매뉴얼은 다음과 같이 말합니다:
아래 첨자가 없는 배열 변수를 참조하는 것은 아래 첨자 0이 있는 배열 변수를 참조하는 것과 같습니다.
0
Bash 또는 POSIX 셸에는 배열 변수가 전체 배열을 나타내는 경우와 ? 로 인덱스된 요소를 나타내는 경우에 대한 몇 가지 일반적인 규칙이 있습니다.
예를 들어,
declare
배열 변수는 전체 배열을 나타내는 것처럼 보이지만 매개변수 확장에서는 index 의 요소를 나타냅니다0
.$ declare -p x declare -a x='([1]="b" [2]="c")' $ echo $x
- 에서는 배열을 의미합니까,
[[ -v myarr ]]
아니면 ?myarr
myarr[0]
답변1
나는 당신의 혼란이 단어에 있다고 생각합니다"인용하다."
당신은하지 않습니다인용하다배열 변수는 결국 declare
이름을 부여한 것 입니다 x
.
변수를 참조하려면 $
이름 앞에 와야 합니다.
bash 매뉴얼 페이지에서 모든 인스턴스를 검색 referenc
하고 읽어보세요.
두 번째 질문은 다음과 같습니다.
에서는 배열을 의미합니까,
[[ -v myarr ]]
아니면 ?myarr
myarr[0]
테스트를 통과했다는 것은 myarr[0]
.
$ declare -p myarr
bash: declare: myarr: not found
$ myarr=()
$ declare -p myarr
declare -a myarr='()'
$ echo $myarr
$ [[ -v myarr ]] && echo is set
$ [[ -v myarr[0] ]] && echo is set
$ [[ -v myarr[1] ]] && echo is set
$ myarr+=([1]=b)
$ declare -p myarr
declare -a myarr='([1]="b")'
$ echo $myarr
$ [[ -v myarr ]] && echo is set
$ [[ -v myarr[0] ]] && echo is set
$ [[ -v myarr[1] ]] && echo is set
is set
$ myarr+=([0]=q)
$ declare -p myarr
declare -a myarr='([0]="q" [1]="b")'
$ echo $myarr
q
$ [[ -v myarr ]] && echo is set
is set
$ [[ -v myarr[0] ]] && echo is set
is set
$ [[ -v myarr[1] ]] && echo is set
is set
$
답변2
변수를 "변수 이름"을 나타내는 문자열과 혼합합니다.
A는 $variable
변수이며 variable
일부 명령에 의해 변수로 해석되는 문자열입니다.
이 시도:
$ a=x
$ x=(111 222 333)
$ declare -p $a
declare -a x='([0]="111" [1]="222" [2]="333")'
변수 a( )의 확장은 $a
string 을 제공하며 x
, 이는 "변수 이름"으로 해석되어 선언된 후 확장되어 인쇄됩니다.
또한 테스트에서는 [[ -v myarr ]]
문자열을 myarr
변수로 해석하므로 항상 전체 변수입니다.
노력하다
$ a=myarr
$ unset myarr
$ [[ -v $a ]] && echo set || echo unset
unset
$ myarr[5]=five
$ [[ -v $a ]] && echo set || echo unset
set