改善脚本输出

时间:2011-05-23 12:10:43

标签: bash

我编写了一个函数来检查作为参数传递的一个或多个变量是否为空(got the idea from here

这是脚本的样子:

#!/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."}"行,但无论我做什么都打破了。

有人知道在脚本中要修改什么来获取我想要的输出吗?

1 个答案:

答案 0 :(得分:2)

您是否看到变量未定义或只是一个空字符串?

空测试

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命令的输出,以查看变量是否列在那里。 -qgrep 安静。然后查看退出状态以查看是否找到了该字符串。如果您的grep不支持-q参数,则可以尝试grep "^$var=" 2> /dev/null


使用[[ $foo ]]语法进行测试不一定有效。下面将打印 $foo is not set ,即使它已设置为空字符串:

foo=""
if [[ $foo ]]
then
      echo "\$foo = '$foo'"
else
      echo "\$foo is not set"
fi
相关问题