답변:
shift
내장 명령을 사용하여 인수를 "먹으십시오". 그런 다음 자식 프로세스를 호출하고 "$@"
나머지 모든 인수를 포함 하도록 인수를 전달하십시오 . 따옴표는 인수 목록의 확장이 올바르게 인용되도록하기 때문에 유지되어야합니다.
$@
본질적으로 배열의 각 요소를 따옴표로 묶은 문자열로 취급합니다-확장의 기회없이 전달됩니다. 또한 각각이 별도의 단어로 표시되도록합니다. 차이를 보여주는 테스트 스크립트와 함께이 설명은 여기에 있습니다 : tldp.org/LDP/abs/html/internalvariables.html#APPREF
bash는 shift 명령을 사용합니다 .
예 : shifttest.sh :
#!/bin/bash
echo $1
shift
echo $1 $2
shifttest.sh 12 3 생성
1
2 3
$1
로 말을 인용하지 않고 "$1"
예 : 그렇다면, 쉘은, 단어 분할을 수행 foo bar
으로 전달됩니다 foo
및 bar
별도.
Bash는 하위 설정 매개 변수 ( 서브 세트 및 하위 문자열 참조 )를 지원하므로 이와 같이 처리 / 전달할 매개 변수를 선택할 수 있습니다.
새 파일을 열고 편집하십시오 : vim r.sh
:
echo "params only 2 : ${@:2:1}"
echo "params 2 and 3 : ${@:2:2}"
echo "params all from 2: ${@:2:99}"
echo "params all from 2: ${@:2}"
그것을 실행 :
$ chmod u+x r.sh
$ ./r.sh 1 2 3 4 5 6 7 8 9 10
결과는 다음과 같습니다.
params only 2 : 2
params 2 and 3 : 2 3
params all from 2: 2 3 4 5 6 7 8 9 10
params all from 2: 2 3 4 5 6 7 8 9 10