12

重複の可能性:
bash: 二重か一重かっこ、かっこ、中かっこ

rc.darchlinuxの cron スクリプトを見ると、次のようになります。

#!/bin/bash
. /etc/rc.conf
. /etc/rc.d/functions

name=crond
. /etc/conf.d/crond
PID=$(pidof -o %PPID /usr/sbin/crond)

case "$1" in
start)
    stat_busy "Starting $name daemon"
    [[ -z "$PID" ]] && /usr/sbin/crond $CRONDARGS &>/dev/null \
    && { add_daemon $name; stat_done; } \
    || { stat_fail; exit 1; }
    ;;

私はほとんどの構文を把握できますが、一体これは何をするのでしょうか:

 [[ -z "$PID" ]]

私はそれが次のようにも書かれているのを見ました:

 [ -z "$PID" ]

[]参考までに、ifステートメントで使用されていることがわかりましたが、ここには何もありません。どんな助けでも大歓迎です。ありがとう!

4

3 に答える 3

11

左角かっこ ([) は、すべてのテストを実行し、true の場合は 0、false の場合はそれ以外を返す test コマンドのエイリアスです。「if」は、テスト コマンドの戻り値にのみ反応します。閉じ括弧は、式が終了する場所を test に伝えます。二重括弧 ([[) は bash に組み込まれており、test への外部呼び出しを置き換えることができます。

于 2012-08-03T13:34:36.777 に答える
7

/usr/bin/test一重括弧は、古い Unix ユーティリティである をエミュレートします。彼らはあなたが求めることはしますが、あなたが望むことはしません。二重括弧は Bash 特有の改善です。

http://tldp.org/LDP/abs/html/testconstructs.html#DBLBRACKETS

[ (左括弧の特殊文字) という専用のコマンドがあります。これは のシノニムでtestあり、効率上の理由から組み込まれています。このコマンドは、その引数を比較式またはファイル テストと見なし、比較の結果に対応する終了ステータスを返します (true の場合は 0、false の場合は 1)。

バージョン 2.02 で、Bash は [[ ... ]] 拡張テスト コマンドを導入しました。これは、他の言語のプログラマーにとってより馴染みのある方法で比較を実行します。[[ はキーワードであり、コマンドではないことに注意してください。

[[ と ]] の間でファイル名の展開や単語の分割は行われませんが、パラメーターの展開とコマンドの置換は行われます。

[... ] ではなく [[ ... ]] テスト構造を使用すると、スクリプト内の多くの論理エラーを防ぐことができます。たとえば、&&、||、<、および > 演算子は [[ ]] テスト内で機能しますが、[ ] 構造内でエラーが発生します。

于 2012-08-03T13:37:30.910 に答える
0

このマニュアルから:

式のバイナリ結果を返す括弧: [[ ]]

[[ 表現 ]]

条件式の評価に応じて、0 または 1 のステータスを返します。[[' and]]' の間の単語では、単語の分割とファイル名の展開は実行されません。チルダ展開、パラメータと変数の展開、算術展開、コマンド置換、プロセス置換、および引用符の削除が実行されます。

&& と || 式 1 の値が条件式全体の戻り値を決定するのに十分な場合、コマンドは式 2 を実行しません。

于 2012-08-03T13:35:15.467 に答える