$ 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
즉, 문자열이 실제로 true를 반환했기 때문에 문자열 일치 조건이 true를 반환하지 않았습니다.아니요성냥.
답변2
대부분 $tpgid
선행 및/또는 후행 공백이 포함되어 있습니다. 값은 숫자이므로 산술 표현식을 사용해야 할 수도 있습니다.
if (( tpgid == -1 )); then ...