![Bash: `a=` 할당은 무엇을 정의하나요?](https://linux55.com/image/110399/Bash%3A%20%60a%3D%60%20%ED%95%A0%EB%8B%B9%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9D%84%20%EC%A0%95%EC%9D%98%ED%95%98%EB%82%98%EC%9A%94%3F.png)
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
출력은 동일합니다.