パラメータ分割

パラメータ分割

他のプロセスを取り巻く単純なラッパーである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

おすすめ記事