使用带有数字的变量运行时遇到一些麻烦..
这有效;
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 手册中有关数组的部分,或者在网上这里