${@: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할 수 있습니다 . 이 구문은 보다 크거나 같은 첫 번째 인덱스부터 시작하여 (인덱스별로 숫자로 정렬된 배열 요소 목록의) 모든 배열 요소 로 확장 (또는 생략 )합니다 . 스칼라 컨텍스트(여기서 스칼라 변수에 대한 할당과 같이)에서 요소 목록 앞에는 공백 문자가 오고 and 의 첫 번째 문자 ( 비어 있는 경우 아무것도 없거나 설정되지 않은 경우 공백) 앞에는 가 붙습니다 .${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다양한 요소를 선택하기 위한 자체 구문이 있습니다.

ksh및 와 달리 bash배열 은 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으로 확장되며 (null) 및 요소 ${a[@]:12:2}로만 확장됩니다 . 특별한 경우로 및 의 이식성을 다시 설명하기 위해 의 첫 번째 요소를 수락하고 로 처리합니다 .$a[12]$a[13]ksh93bashzsh0$@$0

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

관련 정보