Bash:在变量名中使用变量
我想在变量名中使用一个变量,但不知道如何使用它。这是我打算做的Bash:在变量名中使用变量,bash,variables,Bash,Variables,我想在变量名中使用一个变量,但不知道如何使用它。这是我打算做的 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}显然不起作用。我只是这样尝试,因为它在字符串中是这样工作的
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条件中。)
它在变量名中如何工作
谢谢,
帕特里克。您可能不遵循此建议,并执行以下操作:
if some condition; then
id="A"
else
id="B"
fi
eval "${id}_count=\$((${id}_count + 1))"
# or simpler:
# eval "((${id}_count++))"
但使用关联数组(或普通数组)更简单:
但是为什么?这回答了你的问题吗@是的,有点像1934428。但由于我还需要在一些其他变量中使用$id,因此它并没有对代码进行太多清理,因为我还需要定义许多不同的临时变量。尽管如此,它还是比需要使用每个变量的两个变量要好。谢谢,这在一般情况下是有效的,但正如您所说的,不要使用eval。我希望围绕数组工作,这样我就不必重写整个代码。但如果没有其他解决办法,那可能是唯一的选择。?我不明白,我在下面用关联数组写了一个示例。创建依赖于bash中其他变量内容的变量名称是没有意义的——要使用它们,无论如何都必须使用
eval
。这是存储和表示任何数据的错误方法-这里的建议是重新建模您的问题(因为这很可能是一个XY问题),并使用不同的数据结构来表示您的数据。我知道使用数组可能是正确的方法。但这个问题对应于一个现有的代码,到目前为止,我只需要一个变量(A),但现在我需要每个变量的两个版本(A和B)。通过在变量名中添加一个变量,我希望能够用很少的工作来更改整个(现有)代码。更改数组的代码需要做更多的工作,坦率地说,我对数组几乎没有经验。再次声明:您的答案是正确的,我只是希望为我现有的代码提供一个不同的、更简单的“修复”。
declare -A count
if some condition; then
id="A"
else
id="B"
fi
((count[$id]++))