위치 인수 구문 `${18}`에 중괄호가 필요한 이유는 무엇입니까?

위치 인수 구문 `${18}`에 중괄호가 필요한 이유는 무엇입니까?

현재 명령줄을 배우고 있으며 위치 매개변수에 대해 배우고 있습니다. 위치 매개변수가 9로 끝나는 것을 확인했습니다. $9 이상을 사용하려면 중괄호 안에 넣어야 합니다(예: ${18}). 하지만 9개의 위치 매개변수가 있고 더 이상 $18의 모양을 설정할 수 없다는 이야기는 무엇입니까?

답변1

위치 매개변수 목록은 현재 리소스 제약 조건이 허용하는 한 필요한 만큼 길어질 수 있습니다. 이는 목록에 9개 이상의 요소가 있을 수 있음을 의미합니다. 보시다시피 요소 10 이상은 그림과 같이 숫자 주위에 중괄호를 추가하여 액세스할 수 있습니다 ${12}.

대부분의 POSIX 유사 셸에서는 POSIX 표준에 따라 요소 9 이후의 요소에 액세스하려면 중괄호가 필요합니다.

위치 매개변수는 하나 이상의 숫자(한 자리 0 제외)로 표시되는 10진수 값으로 표시되는 매개변수입니다. 위치 인수를 나타내는 숫자는 앞에 0이 있어도 항상 소수 값으로 해석되어야 합니다.두 개 이상의 숫자가 위치 인수로 지정되면 애플리케이션은 해당 숫자를 중괄호로 묶어야 합니다.

(여기에서, "쉘 명령 언어: 위치 매개변수")

위 텍스트에서 "응용 프로그램"이라는 단어는 "귀하의 스크립트"를 의미합니다.

매개변수 확장의 가장 간단한 형태는 다음과 같습니다.

${parameter}

(있는 경우) 값을 parameter바꿔야 합니다.

매개변수 이름이나 기호는 선택 사항인 중괄호로 묶을 수 있습니다.두 자리 이상의 위치 매개변수를 제외하고또는 인수가 이름 뒤에 이름의 일부로 해석될 수 있는 문자가 오는 경우.

(여기에서, "쉘 명령 언어: 매개변수 확장")

또한 처음 몇 개의 위치 매개변수 이외의 다른 매개변수를 처리하는 것에 유의하세요.곧장이것은 매우 드문 일입니다. and 에 액세스하는 $1것은 일반적이지만 $2and $3를 다른 용도로 사용하는 경우는 드뭅니다. 더 일반적인 것은 다음과 같은 목록을 반복하는 것입니다.

for argument do
    # use "$argument" here
done

...또는 전체 목록을 한 번에 사용합니다 "$@".

또한 일부 쉘은 이 표준을 무시하도록 선택할 수도 있습니다. 이것은 zshPOSIX를 엄격하게 준수하려고 시도하지 않는 셸 입니다 .

$ set -- a b c d e f g h i j k l m n o p
$ print $13
m
$ print $16
p

... 모방하지 않는 한 sh:

$ emulate sh
$ print $13
a3

문자열 a3은 출력에서 ​​나온 $1다음 3.

관련 정보