$ 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 ...
此外,你的十六进制转储:
$ 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
简而言之,字符串匹配条件没有返回 true,因为字符串实际上返回 true不是匹配。
答案2
最有可能的是$tpgid
包含前导和/或尾随空格。由于该值是数字,您可能需要使用算术表达式:
if (( tpgid == -1 )); then ...