배쉬 : 위치 매개 변수 조각


20

$@먼저 모든 위치 매개 변수를 다른 배열에 복사하지 않고 Bash에서 어떻게 슬라이스를 얻을 수 있습니까?

argv=( "$@" )
echo "${argv[@]:2}";

1
항상 인용하십시오 "$@". 당신은 argv어떤 인수에 공백이 포함 된 경우 할당은 휴식 것입니다.
jordanm

답변:


31

다른 배열과 동일한 형식을 사용할 수 있습니다. 에서 두 번째 및 세 번째 요소를 추출하려면 $@다음을 수행하십시오.

echo "${@:1:2}"
          - -
          | |----> slice length
          |------> slice starting index 

1
그러나 이것은 v4.1.2에서 char 기준으로 작동하는 것 같습니다. 단어별로 수행하는 방법이 있습니까?
Alexej Magura

@AlexejMagura 나는 당신이 무슨 뜻인지 이해하지 못합니다. 그것은 배열의 요소에 작용합니다. 한 문자 요소가있는 경우 "문자에서"작동합니다. 각 요소가 단어이면 단어에서 작동합니다. 배열이 아닌 문자열에서 이것을 시도하고 있습니까?
terdon

나는 "$ @"의 사본에서 그것을 시도하고 있는데, 그 시점에서 문자열이 될 수 있다고 생각합니다.
Alexej Magura

bash 4.2.46에서 "${@:1:2}"실제로 첫 번째두 번째 명령 줄 인수를 제공 합니다. 한편, "${@:1}"나에게주는 전체 명령 줄 인수를 하고, "${@:0}"나에게주는 전체 명령 줄 인수 다음에 스크립트 이름을 .
Rockallite

@ Rockallite, 그래. $@ 배열 의 두 번째 및 세 번째 요소 는 첫 번째 및 두 번째 인수입니다. "${@:1}"는 두 번째 요소 (첫 번째 인수)로 ${@:0}시작하는 전체 배열 과 스크립트의 이름 인 첫 번째 요소에서 시작하는 전체 배열을 인쇄합니다 . 무엇을 기대하고 있었습니까?
terdon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.