「存在するかどうか」(false / true)の論理チェックではない場合、特定のコマンドを「保証」するために二重括弧を使用するのはなぜですか?

「存在するかどうか」(false / true)の論理チェックではない場合、特定のコマンドを「保証」するために二重括弧を使用するのはなぜですか?

最近、私は私のスクリプトの特定の行の後ろにあるシェル構文とロジックを増やすことを試みてきました。[[expression]]行の実行に何の価値ももたらさない例の目的は何ですか?したがって、スキップできますか?後ろの実際の式のみが使用されます[[]]

export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"

私の仮定は、これがいくつかの値が欠落している場合(ヌルポインタ例外)、ある種のチェックだと思いますが、演算子は"[[]]"そのようなことをしないと思いますか?このスクリプトの目的は簡単です。 =>sdk端末でグローバルに使用できるようにエクスポートすることです。

ベストアンサー1

これ-s file 条件式指定されたファイルが存在し、空でないことを確認してください。これ[[…]]複合コマンドは、二重角括弧で囲まれた式の評価に従って適切な状態で終了します。

だから

[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"

$HOME/.sdkman/bin/sdkman-init.shソースは存在し、空でない場合にのみ提供されます。

export SDKMAN_DIR="$HOME/.sdkman"(別々の行にあるとします。)

おすすめ記事