在 bash 中,如果我进行分配
a=
Run Code Online (Sandbox Code Playgroud)
a现在是什么?我确定 a 不是''字符串,而不是0.
我发现只有下面的测试是真的
if [ $a = ];then echo 'good';fi
Run Code Online (Sandbox Code Playgroud)
它是空字符串。
这与执行相同:
a=''
Run Code Online (Sandbox Code Playgroud)
或者
a=""
Run Code Online (Sandbox Code Playgroud)
或者
a=$''
Run Code Online (Sandbox Code Playgroud)
或者为此很重要:
a=''""$''
Run Code Online (Sandbox Code Playgroud)
那些'', "", 和$'...'将运算符引用到 shell。当你这样做时:
a=''
Run Code Online (Sandbox Code Playgroud)
您不是将由两个单引号字符组成的字符串分配给$a空字符串。这些''是多余的,因为它们里面什么都没有,但这可以使您的代码更清晰一些(更清楚地表明您确实打算分配一个空字符串)。
要将文字分配''给$a,您需要引用这些特殊字符,例如:
a="''" a=\'\' a=$'\'\'' a="'"\'
Run Code Online (Sandbox Code Playgroud)
您的测试命令无效。在
[ $a = ]
Run Code Online (Sandbox Code Playgroud)
由于您忘记引用$a,因此将 split+glob 运算符应用于$a。因为$a是空的(但如果它只包含空格或默认值为 的换行符,则$IFS结果相同)导致没有参数传递给[命令。
所以[接收到的所有参数都是[,=和]。对于[,这是一个判断是否=为非空字符串并返回 true 的测试。
您在这里想要的是将这些参数传递给[命令:
[$a您需要的内容"$a"=''或""......不传递任何内容意味着没有参数传递给[所以第四个参数将是结束]。]所以应该是:
if [ "$a" = '' ]; then echo '$a is empty'; fi
Run Code Online (Sandbox Code Playgroud)
或者:
if [ -z "$a" ]; then echo '$a is empty'; fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |