[ "$VAR" = "" ]와 [ -z "$VAR" ]는 항상 동일합니까?

[ "$VAR" = "" ]와 [ -z "$VAR" ]는 항상 동일합니까?

내 코드는 다음과 같습니다

VAR=""

while [ -z "$VAR" ]; do
  VAR=$( command | grep "important_string" )
done

command그래서 나는 그것이 나타날 때까지 의 출력을 폴링 important_string하고 그것을 에 넣기를 원합니다 $VAR.

[ -z "$VAR" ]와 사이에 기능적 차이가 있나요 [ "$VAR" = "" ]?

답변1

예, ( [ -z "$VAR" ][ "$VAR" = "" ]...)은 동일합니다. 둘 다 null 허용 여부를 테스트하고 있습니다 $VAR(예: 바인딩 해제되거나 빈 문자열로 설정된 경우).

해설자로서세라다[ "$VAR" = "" ]VAR, if 가 유효한 테스트(예: if is )를 사용할 때 , 특히 (or )가 다음인 경우 VAR나쁜 일이 발생할 수 있습니다.-z[test아니요내장 쉘. 하지만 내장 된 기능이 있고 이것은 문제가 되지 않는 것 같습니다 bash. 테스트 에 사용할 수 있습니다 . 바라보다zsh[[ "x$VAR" = "x" ]테스트(1)

물론 POSIX 쉘이나 이와 유사한 것이 있다고 가정합니다.

아마도 -z약간 더 빠를 수도 있고(그러나 쉘 스크립트에서는 마이크로초에 신경 쓰지 않아도 됨) =더 읽기 쉬울 수도 있습니다.

관련 정보