
私は次の行に沿って複数の行を含むtomcat daemon.shスクリプトを理解しようとしています。test ".$TOMCAT_USER" = . && TOMCAT_USER=tomcat
test ".$TOMCAT_USER" = . && TOMCAT_USER=tomcat
私は環境変数TOMCAT_USERが定義されていることを確認し、そうであればそれを使用し、そうでない場合はTomcatのデフォルト値を使用することを発見しました。
私が理解するのは、bashがこのステートメントを評価する方法です。
答え1
&&
デフォルトでは論理ANDです。前のコマンドが正常に完了したかどうかに応じて操作を実行できます(より複雑な場合はそうでない可能性があります)true || false && echo true
。ブール論理ルールに関する記事)。質問にステートメントを作成する別の方法は次のとおりです。
if test ".$TOMCAT_USER" = .; then
TOMCAT_USER=tomcat
fi
それにもかかわらず、これは未設定/空の変数をテストする奇妙な方法です。 POSIXには、すでにこれを行ういくつかの方法があります。
: "${TOMCAT_USER:=tomcat}" # Assign as part of the expansion,
# `:' is a noop to avoid running the expansion.
TOMCAT_USER="${TOMCAT_USER:-tomcat}" # Expand, and then assign
:=
/と-lessバージョン:-
の違い:
は:
、変数が設定されていないかどうかをテストすること(元のテストに近い)に加えて、変数がnullかどうかをテストすることです。