Bash 매뉴얼에서 인용하면 다음과 같습니다.
구문을 사용하여 변수를 할당하면 인덱스 배열이 자동으로 생성됩니다.
name[subscript]=value
아래 첨자는 숫자로 평가되어야 하는 산술 표현식으로 처리됩니다.
예subscript
- 산술 표현식 또는
$((
합을 무시))
하고 산술식만 있는 산술 확장 ?
즉, 연산 확장으로 명령어를 설명하는 것처럼 여기에 연산 확장을 위한 단계가 있는 걸까요?
예를 들어,
$ declare -p myarr
declare -a myarr='([0]="0" [2]="3" [3]="9999")'
$ echo ${myarr[1+2]}
9999
$ echo ${myarr[$((1+2))]}
9999
답변1
산술 확장을 사용하여 명령을 해석하는 것과 같이 [배열 첨자를 사용하여] 산술 확장을 위한 단계가 있습니까?
예.
변수 확장:
$ unset -v a
$ declare -p a
-bash: declare: a: not found
$ x=4
$ a[x]=4
$ declare -p a
declare -a a='([4]="4")'
매개변수 확장:
$ six=six
$ a[${#six}]=3
$ declare -p a
declare -a a='([3]="3" [4]="4")'
명령 대체:
$ a[$(echo 9)]=9
$ declare -p a
declare -a a='([3]="3" [4]="4" [9]="9")'
견적 삭제:
$ a["5"]=5
$ declare -p a
declare -a a='([3]="3" [4]="4" [5]="5" [9]="9")'
$ a['6']=6
$ declare -p a
declare -a a='([3]="3" [4]="4" [5]="5" [6]="6" [9]="9")'
$ a[\7]=7
$ declare -p a
declare -a a='([3]="3" [4]="4" [5]="5" [6]="6" [7]="7" [9]="9")'
3.5.5 산술 확장
표현식의 모든 토큰은 매개변수 및 변수 확장, 명령 대체 및 따옴표 제거를 거칩니다.
답변2
- 인덱스 배열을 첨자로 쓰는 것이 산술 확장인가요?
정확하게 말하자면, 아니요, "산술 확장" 내부의 내용과 동일한 "산술 표현식"이지만 $(( ))
.
둘 다 숫자(또는 null)가 될 때까지 표현식을 평가합니다.