다른 프로세스를 둘러싼 간단한 래퍼인 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 Parameters
bash 맨페이지의 섹션 도 참조하세요 .