问题描述
|
我编写了一个函数,该函数检查作为参数传递的一个或多个变量是否为空(从这里得到想法)
脚本如下所示:
#!/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