$ 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
つまり、文字列が実際に真を返したため、文字列一致条件は真を返しませんでした。いいえマッチ。
答え2
ほとんど$tpgid
の場合、先行および/または末尾のスペースが含まれています。値は数値なので、算術式を使用する必要があります。
if (( tpgid == -1 )); then ...