Hatena::ブログ(Diary)

わからん

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.

 追記/おまけ

シェル変数のデフォルト値周辺の書き方/読み方のまとめをみつけました。

kitokitokikitokitoki 2011/11/23 16:56 「入門UNIXシェルプログラミング 2.4.4 + によるシェル変数の設定」という節にも解説があった

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

Google