改善脚本输出

问题描述

| 我编写了一个函数,该函数检查作为参数传递的一个或多个变量是否为空(从这里得到想法) 脚本如下所示:
#!/bin/bash
is_variable_defined?() {
 for VAR in \"$@\"; do
  : \"${!VAR? \"ERROR: $VAR is undefined.\"}\"
 done
}

TEST=\'a\'

is_variable_defined? TEST TEST2
这是输出
/path/to/script.sh: line 4: !VAR:  ERROR: TEST2 is undefined.
但是我想输出的是:
TEST2 is undefined
我已经尝试过调整
: \"${!VAR? \"ERROR: $VAR is undefined.\"}\"
线,但是无论如何,它都会中断。 有人知道在脚本中进行哪些修改才能获得我想要的输出吗?     

解决方法

您是否在查看变量是未定义的还是只是空字符串? 空测试
is_variable_defined() {
    for var in $@
    do
        if [ -z ${!var} ]   # Or if [[ ${!var} ]]
        then
            echo \"Var $var has no value\"
        fi
    done
}
未定义测试
is_variable_defined() {
for var in $@
do
     if ! set | grep -q \"^$var=\"
     then
        echo \"Var $var is not set\"
     fi
done
最后是查看
set
命令的输出,以查看变量是否在此处列出。
-q
将使
grep
安静。然后查看退出状态,看是否找到了字符串。如果您的
grep
不支持ѭ7,参数,则可以尝试
grep \"^$var=\" 2> /dev/null
。 使用
[[ $foo ]]
语法进行测试不一定有效。即使将其设置为空字符串,也将在下面显示“ 13”:
foo=\"\"
if [[ $foo ]]
then
      echo \"\\$foo = \'$foo\'\"
else
      echo \"\\$foo is not set\"
fi