• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:${@+"${@}"}は何を表していますか?)

${@+"${@}"}とは?

このQ&Aのポイント
  • シェルスクリプトで使われる${@+"${@}"}という表記について、その意味と使い方について解説します。
  • また、「${PROGRAM_DIR?}」という記述についても説明します。
  • この要約では、${@+"${@}"}と${PROGRAM_DIR?}という表記の意味について詳しく解説します。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.1

そのあたりの記号の意味は、man bash の「パラメータの展開」の説明の所に書いてあります。 ${PROGRAM_DIR?} ⇒ $PROGRAM_DIR に展開する。ただし未設定ならエラーメッセージを表示 ${X+$Y} ⇒ $X が未設定なら空に展開する。$Xが設定されていれば $Y に展開する ${@+"${@}"} ⇒ bash に於いては "$@" と同じ。引数が0個なら空に展開し、引数があれば、それぞれの引数に展開する。 古いシェルに於いては、単に "$@" と書くと、引数がない場合、空でなく空文字列に展開されたので、上記のように書く必要があった。 空と空文字列の違いがわからなければ、 echo 引数は $# 個 echo 引数は "$@" です。 というシェルスクリプトファイルを作って、例えばそれを foo とすると、 ./foo ./foo "" を実行してみれば、空(./foo)と、空文字列(./foo "")の違いがわかります。

_alias_
質問者

お礼

ありがとうございます。とても分かりやすい回答でした。 空と空文字の件も試してみました。"$@"はどちらも""ですが、./fooとした場合は引数が0個でした。空文字列は引数があるけど内容は""、空は引数自体ないということですね。

関連するQ&A

専門家に質問してみよう