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

출력은 동일합니다.

관련 정보