Bash: `a=` 할당이 무엇으로 정의되어 있나요?

Bash: `a=` 할당이 무엇으로 정의되어 있나요?

Bash에서 할당을 하면

a=

지금은 무엇입니까 a? 나는 a가 ''문자열이 아니고 가 아니라고 확신합니다 0.

아래 테스트에서만 사실이라는 것을 알았습니다.

if [ $a = ];then echo 'good';fi

답변1

빈 문자열입니다.

다음을 수행하는 것과 동일합니다.

a=''

또는

a=""

또는

a=$''

아니면 그 문제에 관해서는:

a=''""$''

'', ""및 는 $'...'연산자를 쉘에 인용하고 있습니다. 그렇게 할 때:

a=''

두 개의 작은따옴표 문자로 구성된 문자열을 할당하는 것이 아니라 $a빈 문자열을 할당하는 것입니다. 내부에 아무것도 없기 때문에 불필요 ''하지만 코드를 약간 더 읽기 쉽게 만들 수 있습니다(빈 문자열을 할당하려고 했다는 점을 더 명확하게 만듭니다).

''에 리터럴을 할당하려면 $a다음과 같은 특수 문자를 인용해야 합니다.

a="''" a=\'\' a=$'\'\'' a="'"\'

테스트 명령이 잘못되었습니다. ~ 안에

[ $a = ]

를 인용하는 것을 잊었으므로 $a분할+글로브 연산자가 에 적용됩니다 $a. 이후 $a는 비어 있습니다(그러나 기본값이 공백 또는 개행 문자만 포함된 경우에도 동일함 $IFS). 결과적으로 [명령에 인수가 전달되지 않습니다.

따라서 수신되는 모든 인수 는 , 및 [입니다 . 의 경우 이는 비어 있지 않은 문자열인지 확인하고 true를 반환하는 테스트입니다 .[=][=

여기서 원하는 것은 다음 인수를 [명령에 전달하는 것입니다.

  1. [
  2. $a꼭 필요한 내용"$a"
  3. =
  4. 빈 문자열. 필요한 것 ''또는 ""... 아무것도 전달하지 않으면 인수가 전달되지 않으므로 [네 번째 인수가 종결됩니다 ].
  5. ]

따라서 다음과 같아야 합니다.

if [ "$a" = '' ]; then echo '$a is empty'; fi

또는:

if [ -z "$a" ]; then echo '$a is empty'; fi

답변2

변수 a는 빈 문자열과 같습니다.

a=

if [ "$a" -eq "" ]; then echo 'good'; fi

출력은 다음과 같습니다

$ . tst.sh  
good

그리고 이 코드의 경우:

a=

if [ -z "$a" ]; then echo 'good'; fi

출력은 동일합니다.

관련 정보