これは構文上の問題ではありませんが、論理的な問題だと私は確信しています。式[[ $str != *"something 1"* || $str != *"something 2"* ]]
は、$str
が,のパターンに一致しない限り真です。私が何をしたいこと$str
はあなたが&&
代わりの||
を必要とする意味のいずれかのパターンと一致しない場合にtrue何かだと思う
$ str="foo no pattern bar"
$ [[ $str != *"something 1"* || $str != *"something 2"* ]] && echo true || echo false
true
$ str="foo something 1 bar"
$ [[ $str != *"something 1"* || $str != *"something 2"* ]] && echo true || echo false
true
$ str="foo something 2 bar"
$ [[ $str != *"something 1"* || $str != *"something 2"* ]] && echo true || echo false
true
$ str="foo something 1 something 2 bar"
$ [[ $str != *"something 1"* || $str != *"something 2"* ]] && echo true || echo false
false
::考えてみて、これがある理由を理解するには
$ str="foo no pattern bar"
$ [[ $str != *"something 1"* && $str != *"something 2"* ]] && echo true || echo false
true
$ str="foo something 1 bar"
$ [[ $str != *"something 1"* && $str != *"something 2"* ]] && echo true || echo false
false
$ str="foo something 2 bar"
$ [[ $str != *"something 1"* && $str != *"something 2"* ]] && echo true || echo false
false
をチェックDe Morgan's lawsのうちの1つは、「not(AまたはB)」は「(Aではない)と(Bではなく)」と同じであると言う。
構文は問題ありません。なぜそれが間違っていると思いますか? '$ cnt'と' $ str'の値を期待値と一緒に期待値としないでください。 – chepner
well - '[$ cnt -eq 1]'は、 'cnt'が空、未定義、あるいは複数の単語に展開されている場合に、より有用なことを行うのではなく、文法エラーを投げかけます。 '(" $ cnt "-eq 1)'はこれらの事例を避けますが、 '((cnt == 1))'は読みにくい(未設定値を0のように扱います)。しかし、本当に*その変数に一つの数値があると仮定すると、 'IFS'には数字も含まれていないので、引用符がないと直ちにバグは発生しません。まだここに再生器がない。 –
... more bluntly: "うまくいかない"というバグレポートはありません。 –