为了返回退出状态,未加引号、未声明的变量扩展到什么值0?
这是我遇到的特定情况的示例:
[ -n $var ]; echo $?
0
[ -n "$var" ]; echo $?
1
Run Code Online (Sandbox Code Playgroud)
var在这两个测试中,都没有声明该变量。我本可以通过使用 进行测试来省去麻烦-z,其中引用或不引用显然没有什么区别,但我遇到了这种特殊情况,我开始想知道。我更深入地研究了 bash 执行的所有扩展,但找不到对此行为的任何解释。
作为一般规则,我通常引用变量,但希望这种行为的原因可以帮助我更好地理解引用。
、test和命令的行为都是相同的,因为它们根据给出的参数数量[(
不包括结束符/ )执行不同的操作。[[]]]
-n)和操作数。=)和另一个操作数test并[给出“参数太多”错误,并且[[可能给出不同的错误(它有一个更复杂的解析器)。现在,查看示例[ -n $var ]并与[[构造进行比较。由于[[不进行分词,因此它知道变量值在哪里。当var="",给定[[ -n $var ]],参数扩展后,bash 将看到[[ -n "" ]]哪个显然是false。
但对于test和[,分词有效。所以[ -n $var ]
变成[ -n ](空字符串消失)。现在,[看到一个参数,它是一个非空字符串,因此为true。
如果您引用变量:[ -n "$var" ],那么您将得到预期的错误结果。
| 归档时间: |
|
| 查看次数: |
304 次 |
| 最近记录: |