나는 이것을 쉘 스크립트에서 본다.
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의 가치에주의를 기울이십시오.