쉘 스크립트에서 이것을 본 적이 있습니다.
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
.bash
zsh
ksh
및 에서는 다음 구문을 사용하여 배열의 여러 요소에 액세스 bash
할 수 있습니다 . 이 구문은 보다 크거나 같은 첫 번째 인덱스부터 시작하여 (인덱스별로 숫자로 정렬된 배열 요소 목록의) 모든 배열 요소 로 확장 (또는 생략 )합니다 . 스칼라 컨텍스트(여기서 스칼라 변수에 대한 할당과 같이)에서 요소 목록 앞에는 공백 문자가 오고 and 의 첫 번째 문자 ( 비어 있는 경우 아무것도 없거나 설정되지 않은 경우 공백) 앞에는 가 붙습니다 .${array[@]:first:length}
length
length
array
first
bash
ksh93
$IFS
$IFS
zsh
예를 들어:
$ 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]
ksh93
bash
zsh
0
$@
$0
따라서 3개의 쉘 모두에서 사용 ${a[@]:x:n}
하고 ${@:x:n}
이식 할 수 있지만 비희소 배열에만 해당되며 IFS 값에 주의하세요.