쉘 스크립트에서 이것을 봅니다.
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
사용하여 배열의 여러 요소에 액세스할 수 있습니다. 인덱스가 .보다 크거나 같은 첫 번째 것입니다 . 스칼라 컨텍스트(여기서 스칼라 변수에 대한 할당과 같은)에서 요소 목록은 와 의 첫 번째 문자(또는 비어 있는 경우 아무 것도 없고 설정되지 않은 경우 공백)와 공백 문자 로 결합 됩니다 .${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까지 확장되고 (비어 있음) 및 요소 ${a[@]:12:2}
로만 확장됩니다 . 특별한 경우로 및 의 이식성을 위해 에서는 첫 번째 요소를 허용하고 이를 로 처리합니다 .$a[12]
$a[13]
ksh93
bash
zsh
0
$@
$0
${a[@]:x:n}
따라서 3개 셸 모두에서 및 이식성을 사용할 수 있지만 ${@:x:n}
비희소 배열에만 해당되며 IFS의 가치에 주의하세요.