【问题标题】:Use string as bash variable name in alternative value expansion [duplicate]在替代值扩展中使用字符串作为 bash 变量名 [重复]
【发布时间】:2015-04-03 12:32:09
【问题描述】:

如何在 bash 中的替代值扩展 (${var+alt}) 中使用一个变量的值作为另一个变量的名称?

我认为

#!/bin/bash
cat='dog'
varname='cat'
if [ -z ${`echo "${varname}"`+x} ]; then
    echo 'is null'
fi

应该大致相当于

#!/bin/bash
if [ -z ${dog+x} ]; then
    echo 'is null'
fi

但是当我尝试这样做时,我得到了

${`echo "${cat}"`+x}: bad substitution

我猜部分问题是执行命令替换的子shell 不知道$varname 了?我需要导出那个变量吗?

我这样做的原因是我从this answer 那里学到了如何检查变量是否为空,并且我正在尝试将这种检查封装在一个名为is_null 的函数中,如下所示:

function is_null {
    if [ $# != 1 ]; then
        echo "Error: is_null takes one argument"
        exit
    fi
    # note: ${1+x} will be null if $1 is null, but "x" if $1 is not null
    if [ -z ${`echo "${1}"`+x} ]; then
        return 0
    else
        return 1
    fi
}

if is_null 'some_flag'; then
    echo 'Missing some_flag'
    echo $usage
    exit
fi

【问题讨论】:

标签: bash variable-expansion variable-substitution


【解决方案1】:

我不确定我是否理解您的问题。

如果我得到了,你需要的是eval 命令。

$ cat='dog'

$ varname='cat'

$ echo ${varname}

cat

$ eval echo \$${varname}

dog

【讨论】:

  • 他正在寻找的是间接,虽然这可以通过eval 完成,但在这种情况下使用eval 是不受欢迎的。
  • @Davison 我很欣赏你的回答 - eval 可以完成这项工作,但正如大卫所说,我试图避免使用大锤,而是使用更精确的工具。我忘记将我的问题标记为与上面发布的链接重复。
猜你喜欢
  • 2016-09-24
  • 1970-01-01
  • 2020-08-14
  • 2012-07-18
  • 2020-11-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 2015-04-18
相关资源
最近更新 更多