以下のライニングを見て、正確な使い方と動作を分析するのに少し時間を費やしました。たとえば、設定されていない場合は、値を次の値に設定します。
export JDK_HOME=${JDK_HOME:-"/some/path/java-1.7"}
何かを検索すると、「:-」などのトリッキーなテキストは表示されません。文書化された便利な1行の便利なリストまたは参照する特定のマニュアルページがありますか?
ベストアンサー1
ドキュメント参照に対する他の素晴らしい答えに加えて、私はいつもBashのデバッグツールを使って何が起こっているのかを確認します。
次のようにブロックにラップして、目的のコマンドを有効または無効にできます。
$ set -x; command_to_watch; set +x
はい
$ set -x; export JDK_HOME=${JDK_HOME:-"/some/path/java-1.7"}; set +x
+ export JDK_HOME=/some/path/java-1.7
+ JDK_HOME=/some/path/java-1.7
+ set +x
ここで変数$JDK_HOME
がに設定されていることがわかります/some/path/java-1.7
。ただし、別の値に設定すると、次のようになります。
$ export JDK_HOME=/a/path
$ echo $JDK_HOME
/a/path
このコマンドを再実行してください。
$ set -x; export JDK_HOME=${JDK_HOME:-"/some/path/java-1.7"}; set +x
+ export JDK_HOME=/a/path
+ JDK_HOME=/a/path
+ set +x
何もしないことがわかります。これは、変数がすでに設定されている場合、このコマンドはその変数を無視し、そうでない場合は値に設定することを示します/some/path/java-1.7
。
私たちの疑いを確認しましたバッシュのマニュアルページ:
${parameter:-word}
Use Default Values. If parameter is unset or null, the expansion of word
is substituted. Otherwise, the value of parameter is substituted.