通过比较shell脚本中的两个字符串来请求变量

时间:2017-11-30 14:20:05

标签: linux shell unix

我想比较两个变量来检查这个变量是否为空。 我知道它很混乱,但我不知道如何更好地解释它。这里有一个小例子代码:

declare -a List=("human" "animal")
sqlhuman="SELECT * FROM example;"

for i in "${List[@]}"
do
   if[ -n "sql$i"];then
       #execute sql
   else
       #do nothing
   fi
done

在这种情况下,脚本检查“sqlhuman”和“sqlanimal”是否为空。当然他们不是空的。两者都有超过1个字母。我希望它们作为变量的指针并检查它们是否为空。

所以我需要的是动态构建变量目录。例如,在第一个迭代器上,他应检查$ sqlhuman是否为空。

1 个答案:

答案 0 :(得分:2)

您正在检查字符串 sqlhuman是否为空,而不是名为sqlhuman的变量的内容。使用间接参数扩展:

var="sql$i"
if [ -n "${!var}" ]; then

那就是说,一个功能将是一个更清洁的方法。

do_sql () {
    case $1 in
        human) echo "running sql for human" ;;
        animal) echo "running sql for animal" ;;
        *) echo "doing nothing" ;;
    esac
}

for i in "${List[@]}"; do
    do_sql "$i"
done