[[]]の文字列一致条件が維持されないのはなぜですか?

[[]]の文字列一致条件が維持されないのはなぜですか?
$ tpgid=$(ps  --no-headers -o tpgid -p 1)
$ echo $tpgid
-1
$ if [[ $tpgid == "-1" ]]; then
>     echo "yes"
> else
>     echo "no"
> fi
no

条件が維持されないのはなぜですか?ありがとうございます。

$ printf "%s" "$tpgid" > /tmp/test/fff
$ hd /tmp/test/fff
00000000  20 20 20 2d 31                                    |   -1|
00000005

ベストアンサー1

[[ ... ]]orより[ ... ]「よりスマート」にすることはできますが、test ...数値比較演算子を明示的に使用する方が良いです。

if [[ "$tpgid" -eq -1 ]]; then ...

また、16進ダンプは次のとおりです。

$ hd /tmp/test/fff
00000000  20 20 20 2d 31                                    |   -1|

;代わり$tpgidに拡張されている場合は、文字列比較を正しく実行している間にこれを処理する方法を知っています。" -1""-1"-eq==

$ if [[ "   -1" == -1 ]]; then echo truthy; else echo falsy; fi
falsy
$ if [[ "   -1" -eq -1 ]]; then echo truthy; else echo falsy; fi
truthy

つまり、文字列が実際に真を返したため、文字列一致条件は真を返しませんでした。いいえマッチ。

おすすめ記事