如何动态地检查Bash变量是否存在?
如何动态地检查Bash变量是否存在?
这个问题已经有答案了:
请考虑以下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日
这个函数应该能帮到您:
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!