テストコマンドが失敗で始まるのはなぜですか(1で終了)?

テストコマンドが失敗で始まるのはなぜですか(1で終了)?

次のテストコマンドがあります。

test "ssh://[email protected]/teros/moodwire_demo" == ssh*; echo $?

出るときなぜ1?最初の文字列が2番目の文字列で始まるかどうかを確認したいと思います。

答え1

testのコマンドはbashこれを実行できません。文字列の場合、式、不等式、およびアルファベット順のテストのみをサポートします(参考help test文献を参照bash)。

しかし、あなたは使用することができます

[[ "ssh://[email protected]/teros/moodwire_demo" == ssh* ]]
echo "$?"

[[ ... ]]この形式の文字列の一致はでのみ実行されますbash

使用しないでください[[ ... ]]

expr "ssh://[email protected]/teros/moodwire_demo" : '^ssh' >/dev/null
echo "$?"

これはexprユーティリティを使用して一致します(デフォルト)。 正規表現 ^ssh反対の文字列です。expr組み込みユーティリティではないため、==内部で使用するよりも少し遅くなります。[[ ... ]]bash

関連情報