【发布时间】:2014-11-04 02:15:46
【问题描述】:
在我的脚本中,我有未知数量的包含角度的变量,我想将它们转换为向量。我制作了变量名称,使得每个“参数”的角度都具有以下形式: {参数}_angle_{纬度/perp} 因此,每个参数都有一个“lat”和“perp”角度变量。 所以我想要做的是找到所有包含“_angle_lat”的变量,对这些变量的值进行一些计算,并创建一个包含“参数”名称的新变量。 例如:
export M0_angle_lat=4
export M1_angle_lat=70
export M1_angle_perp=8
export M0_angle_perp=90
# Now I want to use these values to calculate vectors
for varname in *_angle_lat
do
# at first iteration it will get for example "varname=M0_angle_lat" in which case
# I want it to do:
M0_X=$(( $M0_angle_lat * $M0_angle_perp ))
# The second iteration in case would then give "varname=M1_angle_lat" in which case
# I want it to do:
M1_X=$(( $M1_angle_lat * $M1_angle_perp ))
done
我希望我的目标很清楚。感谢您的帮助!
【问题讨论】:
-
bash真的不是这种编程语言。它确实有数组,但它们不适合构建更复杂的数据结构,并且尝试使用动态生成的变量名称编写代码充其量是容易出错的。 (虽然bash4.3 引入了一个让它变得更简单的特性。) -
我使用
bash的原因是因为它是一个小脚本,必须在集群上调用,并且所有周围的代码和脚本也在bash中。 -
如果您可以将变量重写为可通过前缀匹配,那么您可以使用
${!prefix*}和${!prefix@}扩展来获取以prefix开头的变量的名称。 -
这也是@chepner 在他的回答中所建议的。但是将“参数”名称作为前缀的原因是由于该参数的一些其他属性也必须定义并且应该分组。尽管接受的答案可以解决我的问题而无需更改前缀。但是感谢您的建议!