如何动态地检查Bash变量是否存在?

11 浏览
0 Comments

如何动态地检查Bash变量是否存在?

这个问题已经有答案了:

如何检查Bash中的变量是否设置

什么是间接扩展?${!var *}是什么意思?

请考虑以下Bash函数。

#!/bin/bash
function assert_var(){
  echo "check if variable with name $1 exists"
  if [ -z $1 ];then
    echo "EXISTS!"
  else
    echo "NOT EXISTS!"
  fi
}
export FOO="123"
assert_var "FOO"
assert_var "BAR"

期望是检测到变量FOO和缺少BAR。为此,我需要以某种方式将变量名作为参数传递和使用在函数中。

如何正确地做到这一点?

admin 更改状态以发布 2023年5月24日
0
0 Comments

这个函数应该能帮到您:

assert_var() {
   if [[ -z ${!1+x} ]]; then
      echo 'NOT EXISTS!'
   else
      echo 'EXISTS!'
   fi
}

修改如下:

  • 使用${var+x}来检查变量是否未设置。 ${var+x}是一种参数扩展,如果var未设置,则计算结果为空,否则替换为字符串x更多详细信息请参见此处
  • 通过名称间接引用变量,例如使用${!1+x}而不是${1+x}
  • 在字符串中使用!时,请使用单引号以避免历史扩展。

测试:

FOO='123'
assert_var "FOO"
EXISTS!
assert_var "BAR"
NOT EXISTS!

0