【问题标题】:Bash: use a variable within a variable nameBash:在变量名中使用变量
【发布时间】:2020-11-12 12:24:18
【问题描述】:

我想在变量名中使用一个变量,但不知道该怎么做。这就是我打算做的事情

if [some condition]; then
    id="A"
else
    id="B"
fi

${id}_count=$((${id}_count + 1))

如果满足条件,它会在哪里

A_count=$(A_count + 1))

或者如果条件不满足

B_count=$(B_count + 1))

${id} 显然不起作用。我只是这样尝试,因为它在字符串中以这种方式工作。

(不,这不是我想在其中使用 $id 的唯一行。否则我会直接将它放在 if 条件中。)

如何在变量名中工作?

谢谢, 帕特里克

【问题讨论】:

  • 但是……为了什么?
  • 这能回答你的问题吗? Bash indirect variable reference
  • @user1934428 有点,是的。但是由于我还需要在其他一些变量中使用 $id ,所以它不会清理代码很多,因为我仍然需要定义很多不同的临时变量。仍然比需要使用每个变量的两个变体要好。

标签: bash variables


【解决方案1】:

Do not use eval。您可能不遵循此建议,并执行以下操作:

if some condition; then
    id="A"
else
    id="B"
fi

eval "${id}_count=\$((${id}_count + 1))"
# or simpler:
# eval "((${id}_count++))"

但使用关联数组(或普通数组)更简单:

declare -A count
if some condition; then
    id="A"
else
    id="B"
fi
((count[$id]++))

【讨论】:

  • 谢谢,这通常有效,但正如您所说,不要使用 eval。我希望解决数组问题,这样我就不必重写整个代码。但如果没有其他解决方案,那可能是唯一的选择。
  • ?我不明白,我在下面写了一个带有关联数组的示例。在 bash 中创建依赖于其他变量内容的变量名称是没有意义的 - 要使用它们,无论如何您都必须使用 eval。这是存储和表示任何数据的错误方法 - 建议在这里重塑您的问题(因为这很可能是一个 XY 问题)并使用不同的数据结构来表示您的数据。
  • 我知道使用数组可能是正确的方法。但是这个问题对应于一个现有的代码,到目前为止我只需要一个变量(A),但现在我需要每个变量的两个版本(A 和 B)。通过在变量名称中添加变量,我希望能够通过很少的工作来更改整个(现有)代码。更改数组的代码需要做更多的工作,坦率地说,我对数组的经验很少。再说一遍:你的答案是正确的,我只是希望对我现有的代码有一个不同的、更简单的“修复”。
猜你喜欢
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 2019-03-05
相关资源
最近更新 更多