2014-10-06 202 views
0

我正在寻找一种方法将字符串添加到bash中的变量名称中,并将其评估为新变量。例如:Bash中变量变量的变化

#!/bin/bash 
file="filename" 
declare ${file}_info="about a file" 
declare ${file}_status="status of file" 
declare ${file}_number="29083451" 

echo ${${file}_info} # <-- This fails with error: "bad substitution" 

有没有办法做到这一点?

我实际上并没有在任何地方的任何生产代码中实现这个。我只想知道是否有某种方法可以使用变量和字符串创建变量名称。这似乎是一个有趣的问题。

另请注意,我是而不是问关于bash间接寻址,这是使用${!x}来评估变量的内容作为变量。

+0

它看起来像在http://stackoverflow.com/questions/8435256/use-string-as给出的EVAL方法-variable-name-in-bash-script可能就是你正在寻找的那个。 – jpe 2014-10-06 21:54:55

+1

间接常见问题解答告诉您如何编写,而不仅仅是如何阅读,所以它实际上是同一主题。 – 2014-10-06 22:09:17

+0

同意。正如我已经审查过评论和答复,似乎必须在解决方案中涉及间接性。我希望有另一种方式,但是如果在这个过程中使用间接方法,似乎至少有一种解决方案。 – vastlysuperiorman 2014-10-06 22:10:45

回答

0

你是不是问间接,但是这有什么可以帮您:

info=$file\_info 
echo ${!info} 
+0

显然我的编辑被拒绝了。看起来你的答案应该是'$ {!info}'而不是'$ {!name}'。我也曾希望在不使用像这里使用的“信息”这样的占位符变量的情况下实现这一点,但您确实已经解决了这个问题。会接受你的答案。 – vastlysuperiorman 2014-10-06 22:51:35