인덱스 배열을 첨자로 쓰는 것이 산술 확장인가요?

인덱스 배열을 첨자로 쓰는 것이 산술 확장인가요?

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)가 될 때까지 표현식을 평가합니다.

관련 정보