BASH变量名包含数字问题

BASH变量名包含数字问题

使用带有数字的变量运行时遇到一些麻烦..

这有效;

sourceid_2="blah"
echo $sourceid_2

但这是行不通的;

sourceid_2="blah"
i=2
echo $sourceid_$i

任何想法如何解决这一问题?我尝试不使用下划线..但这没有帮助。

我的最终目标是对 for i in {2..7} 循环中的变量进行一些操作..像这样;

for i in {2..7}
do
echo $sourceid_$i
done

答案1

echo $sourceid_$i展开两个单独的变量:$sourceid_$i。执行您想要执行的操作的最简单方法是使用间接引用:

sourceid_2="blah"
i=2
var=sourceid_$i
echo "${!var}"

但正如 @dave_thompson_085 指出的那样,数组通常是完成此类事情的更好方法:

declare -a sourceid
sourceid[2]="blah"
i=2
echo "${sourceid[i]}"

请注意,数组是 bash 扩展,在更基本的 shell 中不可用。

答案2

您的问题不是包含数字的名称(这可以正常工作),而是包含多变的。您可以使用eval(这很难正确且容易搞砸)或间接,就像x=source_$i; echo "${!x}"在这种情况下这是一个骗局名称中带有变量的 bash 数组其中SX已经自动放入相关列表中供您查看。

但如果您想要通过数字访问多个相关变量,则更好的是使用数组。这正是阵列的设计目的,使它们更方便、更安全。要了解 bash 中的数组,请参阅您系统上的 bash 手册中有关数组的部分,或者在网上这里

相关内容