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를 반환하는 테스트입니다 .[
=
]
[
=
여기서 원하는 것은 다음 인수를 [
명령에 전달하는 것입니다.
[
$a
꼭 필요한 내용"$a"
=
- 빈 문자열. 필요한 것
''
또는""
... 아무것도 전달하지 않으면 인수가 전달되지 않으므로[
네 번째 인수가 종결됩니다]
. ]
따라서 다음과 같아야 합니다.
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
출력은 동일합니다.