今天写bash脚本时犯了一个小错误。下面的代码
#!/bin/bash
if [ -n "${UNDEFINED_VAR}"]; then
echo 'string not empty'
echo "$UNDEFINED_VAR"
else
echo 'string empty'
fi
返回string not empty
和一个空行。如果你仔细观察,我会发现]
上面的代码前面缺少一个空格。让我有点惊讶的是 bash 愉快地运行我的代码,没有任何unexpected token
(或其他)语法错误。旁注[[
给出了大写的正确语法错误。
我的问题:这是否只是未定义的行为,因为我没有使用合法语法,并且 bash 可以自由地执行任何操作,或者它是某种非常奇怪的合法语法,给出了非常意外的结果?
答案1
未设置时UNDEFINED_VAR
,命令
[ -n "${UNDEFINED_VAR}"]
将扩展到
[ -n ]
这是明确定义的,并且由于字符串-n
非空而为真。
[
对单个参数(忽略 )执行的默认测试]
是测试非空字符串。该字符串-n
是一个非空字符串。