[[ ]]의 문자열 일치 조건이 유지되지 않는 이유는 무엇입니까?

[[ ]]의 문자열 일치 조건이 유지되지 않는 이유는 무엇입니까?
$ 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 ...

관련 정보