我编写了一个函数来检查作为参数传递的一个或多个变量是否为空(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."}"
行,但无论我做什么都打破了。
有人知道在脚本中要修改什么来获取我想要的输出吗?
答案 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
命令的输出,以查看变量是否列在那里。 -q
会grep
安静。然后查看退出状态以查看是否找到了该字符串。如果您的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