Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:在变量名中使用变量_Bash_Variables - Fatal编程技术网

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]++))