셸 스크립트에서 볼 수 있습니다.
variable=${@:2}
무엇을하나요?
댓글
답변
Bash에서 특수 변수 $@
의 내용을 표시합니다. 여기에는 모든 명령 줄 인수가 포함되어 있으며이 명령은 두 번째 인수의 모든 인수를 가져 와서 변수에 저장합니다. , variable
.
예
여기에 exampe 스크립트가 있습니다.
#!/bin/bash echo ${@:2} variable=${@:3} echo $variable
실행 예 :
./ex.bash 1 2 3 4 5 2 3 4 5 3 4 5
참조
주석
- 표시된 기술은 주어진 인수를 단일 끈. 별도의 인수로 유지해야하는 경우 배열을 사용합니다.
vars=( "${@:2}" )
- @glennjackman-지적 해 주셔서 감사합니다.
- 또한 중괄호 사용에 유의하십시오. 항상 중괄호를 사용해야하지만 Bash는 컨텍스트가 명확 할 때이를 생략 할 수 있도록합니다. 따라서
$@
및${@}
는 동일하지만 후자는 " 더 정확합니다 " 구문.$@:2
는 모호하고 따라서${@}:2
<로 해석되기 때문에${@:2}
와 함께 대괄호를 사용해야합니다. / div>는 동일하지 않습니다.
답변
그것 “은 ksh
기능은 bash
및 최신 버전의 zsh
에서도 찾을 수 있습니다.
ksh
및 bash
, ${array[@]:first:length}
구문을 사용하여 배열의 여러 요소에 액세스 할 수 있습니다. 최대 length
(또는 length
가 생략 된 경우 모두)까지 array
요소까지 확장됩니다. 배열 (인덱스에서 숫자로 정렬 된 배열 요소 목록에서), 인덱스가 first
보다 크거나 같은 첫 번째 항목부터 시작합니다. 스칼라 컨텍스트에있을 때 (예 : 스칼라 변수에 할당) 요소 목록은 공백 ch로 결합됩니다. bash
및 ksh93
이고 첫 번째 문자가 $IFS
인 aracters (또는 $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}
가 아니라 $@
와 동일합니다.
p>
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]
및 요소. 특수한 경우이며 ksh93
및 bash
의 이식성을 위해 다시, zsh
도 허용합니다. $@
에 대한 0
첫 번째 요소이며 $0
로 취급합니다.
따라서 ${a[@]:x:n}
및 ${@:x:n}
를 3 개 셸 모두에서 이식 가능하게 사용할 수 있지만 희소하지 않은 배열에만 사용할 수 있습니다. IFS의 가치.
설명
- 배열 색인 구문을 설명해 주셔서 감사합니다.
var="my_value"; echo var="${var[@]:2}"; echo "$var"
차이점이 보이십니까?