./script.sh arg1 [arg2 arg3 ...]
, , ... 명령줄 매개변수는 arg1
, , ... 을 통해 얻을 수 있지만 arg2
매개변수 개수는 다음과 같습니다 .$1
$2
아니요안정적인.
arg2
쉘 스크립트에서 다음부터 시작하여 프로그램에 인수를 전달하고 싶습니다 .
#/bin/bash
...
/path/to/a/program [I want to pass arg2 arg3 ... to the program]
...
하나 이상의 매개변수가 있을 수 있는데 어떻게 해야 합니까?
답변1
일반적인 접근 방식은 복사본을 저장하는 것입니다.아르기닌1( "$1"
) 인수를 1비트 이동하므로 전체 목록을 다음과 같이 참조할 수 있습니다 "$@"
.
#!/bin/sh
arg1="$1"
shift 1
/path/to/a/program "$@"
Bash는 확실히 일부 배열 지원을 제공하지만 질문에서는 이를 요구하지 않습니다.
만약에아르기닌1선택사항이므로 다음과 같이 확인할 수 있습니다.
if [ $# != 0 ]
then
arg1="$1"
shift 1
fi
답변2
매개변수 확장을 사용하여 위치 매개변수를 분할할 수 있습니다. 구문은 다음과 같습니다.
${parameter:offset:length}
생략 하면 length
마지막 값이 고려됩니다.
두 번째 매개변수에서 마지막 매개변수로 전달하려면 다음이 필요합니다.
${@:2}
예:
$ foo() { echo "${@:2}" ;}
$ foo bar spam egg
spam egg