![[[ ]]의 문자열 일치 조건이 유지되지 않는 이유는 무엇입니까?](https://linux55.com/image/145472/%5B%5B%20%5D%5D%EC%9D%98%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%EC%9D%BC%EC%B9%98%20%EC%A1%B0%EA%B1%B4%EC%9D%B4%20%EC%9C%A0%EC%A7%80%EB%90%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
$ 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 ...