${@:2}는 쉘 스크립트에서 무엇을 의미합니까?

${@:2}는 쉘 스크립트에서 무엇을 의미합니까?

쉘 스크립트에서 이것을 봅니다.

variable=${@:2}

무엇을 하고 있나요?

답변1

$@Bash에서 특수 변수의 내용을 보여줍니다 . 여기에는 모든 명령줄 인수가 포함되어 있으며 이 명령은 두 번째 인수의 모든 인수를 가져와 변수에 저장합니다 variable.

다음은 예제 스크립트입니다.

#!/bin/bash

echo ${@:2}

variable=${@:3}
echo $variable

실행 예시:

./ex.bash 1 2 3 4 5
2 3 4 5
3 4 5

참고자료

답변2

이는 최신 버전의 ksh에서도 볼 수 있는 기능 입니다 .bashzsh

ksh및 에서는 다음으로 시작하는 배열 요소(인덱스에 숫자로 정렬된 배열 요소 목록) 까지 ( 생략된 경우 전체 ) 요소까지 확장되는 구문을 bash사용하여 배열의 여러 요소에 액세스할 수 있습니다. 인덱스가 .보다 크거나 같은 첫 번째 것입니다 . 스칼라 컨텍스트(여기서 스칼라 변수에 대한 할당과 같은)에서 요소 목록은 와 의 첫 번째 문자(또는 비어 있는 경우 아무 것도 없고 설정되지 않은 경우 공백)와 공백 문자 로 결합 됩니다 .${array[@]:first:length}lengthlengtharrayfirstbashksh93$IFS$IFSzsh

예를 들어:

$ a[23]=a a[5]=b a[235]=c a[45]=d
$ x=${a[@]:12:2}; printf '<%s>\n' "$x"
<a d>

$@특별한 경우이다. 위치 매개변수( , ...) $@의 배열입니다 . 그러나 와 함께 사용하면 , 도 포함됩니다. 따라서 다른 배열과는 달리 와 동일합니다 .$1$2:$0${@:1}$@${@:0}

에서는 zsh약간 다릅니다. 호환성을 위해 최근에야 구문을 zsh추가했지만 ksh요소 범위를 선택하기 위한 자체 구문이 있습니다.

kshbash와 달리 zsh배열은 스칼라 변수와 다른 변수 유형이고 희소하지 않으며( zsh다른 변수 유형으로 연관 배열을 가짐) 0 대신 인덱스 1에서 시작합니다.

의 경우 다음 zsh을 사용하여 배열 요소 범위에 액세스합니다 $a[first,last]( last끝에서 거꾸로 계산하려면 음수일 수도 있음).

안에 zsh,

a[23]=a a[5]=b a[235]=c a[45]=d

235개의 요소로 구성된 배열을 생성하며 대부분 비어 있습니다. $a[12,50]요소 12에서 50까지 확장되고 (비어 있음) 및 요소 ${a[@]:12:2}로만 확장됩니다 . 특별한 경우로 및 의 이식성을 위해 에서는 첫 번째 요소를 허용하고 이를 로 처리합니다 .$a[12]$a[13]ksh93bashzsh0$@$0

${a[@]:x:n}따라서 3개 셸 모두에서 및 이식성을 사용할 수 있지만 ${@:x:n}비희소 배열에만 해당되며 IFS의 가치에 주의하세요.

관련 정보