bash 测试 bultin 后缺少空格 - 合法语法还是未定义?

bash 测试 bultin 后缺少空格 - 合法语法还是未定义?

今天写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是一个非空字符串。

相关内容