私はbashテスト演算子のこれらの動作をよく理解していません。私はこの行を使用してvagrantがインストールされていることを確認します。
if [ $(vagrant --version > /dev/null) ]; then echo "HELLO"; fi
これがfalse(1)を返すことがわかっているので、次のように入力する必要があります。
if vagrant --version > /dev/null; then echo "HELLO"; fi
期待される結果を得るために。しかし、[ $(vagrant --version> / dev / null)]がfalse(1)を返す理由はまだ理解されていません。 True(0) を返さないでください。
$(vagrant --version > /dev/null)
式であるtrueを返します(そうではありませんか?)。
~からテストマニュアルページ:
テストユーティリティは式を評価し、trueと評価された場合は終了ステータス0(true)を返し、そうでない場合は1(false)を返します。式がない場合、testも1(false)を返します。
答え1
以下はすべて同じです。
[ $(vagrant --version > /dev/null) ]
[ ]
test
シェルは他のプログラミング言語とは異なります。これには、戻り値と標準出力という2つの出力があります。 stdoutをに渡していますが、test
stdoutがリダイレクトされたため、空の文字列です。
あなたが探しているものです。
[ $(vagrant --version > /dev/null; echo $? ) ]
しかし、[ 0 ]
背中はすべて[ 1 ]
trueを返します。なぜなら、[ … ]
その単語が空でないことをテストするための単語があるからです。だからあなたは必要です
[ $(vagrant --version > /dev/null; echo $? ) = 0 ]
またはもっと簡単に
vagrant --version > /dev/null