【问题标题】:How to check dynamically that a Bash variable exists? [duplicate]如何动态检查 Bash 变量是否存在? [复制]
【发布时间】:2020-10-21 23:37:42
【问题描述】:

请考虑以下 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 的缺失。 为此,我需要以某种方式传递变量名并将其用作函数的参数。

如何正确地做到这一点?

【问题讨论】:

标签: bash variables


【解决方案1】:

这个函数应该为你完成这项工作:

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

变化是:

  • 使用${var+x} 检查变量是否未设置。 ${var+x} 是一个参数扩展,如果 var 未设置,则计算结果为空,否则替换字符串 xMore details here.
  • 使用名称间接引用变量,即${!1+x},而不是${1+x}
  • 在字符串中使用! 时使用单引号以避免历史扩展

测试:

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

【讨论】:

  • 你能解释一下${!1+x}在做什么吗?
  • 是的,我刚刚添加了
猜你喜欢
  • 2011-12-19
  • 2011-05-20
  • 2018-08-13
  • 2011-12-25
  • 2014-02-05
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多