나는 이것을 쉘 스크립트에서 본다.
variable=${@:2}
뭐하는거야?
var="my_value"; echo var="${var[@]:2}"; echo "$var"차이점을 보시겠습니까?
나는 이것을 쉘 스크립트에서 본다.
variable=${@:2}
뭐하는거야?
var="my_value"; echo var="${var[@]:2}"; echo "$var"차이점을 보시겠습니까?
답변:
$@Bash에서 특수 변수의 내용을 보여줍니다 . 여기에는 모든 명령 행 인수가 포함되며이 명령은 두 번째 인수에서 모든 인수를 가져 와서 변수에 저장합니다.variable .
예고는 스크립트입니다.
#!/bin/bash
echo ${@:2}
variable=${@:3}
echo $variable
예제 실행 :
./ex.bash 1 2 3 4 5
2 3 4 5
3 4 5
vars=( "${@:2}" )
$@그리고 ${@}후자는 "더욱 정확한"구문이지만 동일하다. 는 대괄호를 사용해야합니다. 모호 ${@:2}하기 $@:2때문에으로 해석되므로 ${@}: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.
따라서 3 가지 쉘 모두에서 이식 가능 ${a[@]:x:n}하며 ${@:x:n}스파 스가 아닌 어레이에만 사용할 수 있으며 IFS의 가치에주의를 기울이십시오.