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

标签 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 是否为空。

最佳答案

您正在检查字符串 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

关于linux - 通过比较 shell 脚本中的两个字符串来请求变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47575652/

相关文章:

linux - 让 bash 提示删除相关的点文件

php - 限制文件可以下载的次数

linux - 通过 Jenkins SSH 插件连接和普通 ssh 之间的区别

shell - 提取标签 <t> </t> 之间的数据

c - 如何将stdin通过管道传递给 child 并在C中执行猫

java - KWin 和 java 透明度

linux - wget 和 bash 错误 : bash: line 0: fg: no job control

linux - 检查新上传的文件并在 bash 脚本中重定向其他文件中的文件数据?

linux - 单步调试 Linux 内核源代码?

linux - Unix Shell 脚本中浮点值的关系运算符