매개변수 분할

매개변수 분할

다른 프로세스를 둘러싼 간단한 래퍼인 bash 스크립트가 있습니다.

$ cat ~/bin/s3cmd
#!/bin/sh
trickle -u 80 ~/bin/s3cmd.py $*
$

이는 매개변수에 공백이 포함되어 있지 않을 때 유용합니다. 그러나 s3cmd인수가 명령줄에서 이스케이프되더라도 외부 스크립트에 전달된 인수에 공백이 포함될 때마다 실패하는 것 같습니다 .

모든 단일 매개변수가 올바르게 전달되도록 공백을 어떻게 증명합니까 s3cmd.py?

답변1

사용 "$@".

#!/bin/sh
trickle -u 80 ~/bin/s3cmd.py "$@"

암시적 단어 분할을 수행할 때(거의 항상 인용되지 않은 경우) $*is와 is 사이에는 기능적 차이가 없습니다. $@그러나 인용된 경우 는 $*의 첫 번째 문자로 구분된 단일 문자열 IFS이며 "$@"실제 배열(원하는 것)입니다.

$ set foo bar baz
$ IFS=c
$ printf '%s\n' "$@"
foo
bar
baz
$ printf '%s\n' "$*"
foocbarcbaz

답변2

$* 대신 $@를 사용하고 이를 인용해야 합니다.

trickle -u 80 ~/bin/s3cmd.py "$@"

Special Parametersbash 맨페이지의 섹션 도 참조하세요 .

관련 정보