2011.11.23
■[シェルスクリプト] シェルスクリプトの引数をそのまま別のコマンドにわたす command ${@+"$@"}
シェルスクリプトの引数をそのまま別のコマンドにわたす。これは引数の多いコマンドに対し、いくつかの引数を固定にしたラッパーをつくるときなんかによく使います。今回の個人的なシェルスクリプトブームにのっかって、Bruce Blinn さんの名著「入門UNIXシェルプログラミング」にあった細かい指摘の仕組みも調べておきました。
以下の書き方では、引数がなかった場合、command に空文字が渡されてしまいます。細かいこと言っちゃってごめんね。
command "$@"
だけど、次のようにすれば、空文字が渡りませんよ。
command ${@+"$@"}
man を読むと、対象が null か unset されているなら何もパラメータ展開しない、つまり何もしないという定義をうまく適用したものだ、ということがわかりました。
${parameter:+word}
Use Alternate Value. If parameter is null or unset, nothing is substituted,
otherwise the expansion of wordis substituted.
追記/おまけ
シェル変数のデフォルト値周辺の書き方/読み方のまとめをみつけました。
