Bash:遍历名称中包含模式的变量

标签 bash variables for-loop

在我的脚本中,我有未知数量的包含角度的变量,我想将其转换为向量。我制作了变量名,使得每个“参数”的角度都具有以下形式: {参数}_angle_{lat/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

我希望大家清楚我的目标是什么。感谢您的帮助!

最佳答案

您可以做的是使用 env 获取所有变量的列表,然后遍历它们:

while IFS='=' read -r name value ; do
  if [[ $name == *'_angle_lat'* ]]; then
    echo "$name" ${!name}
    prefix=${name%%_*} # delete longest match from back (everything after first _)
    angle_lat="${prefix}_angle_lat"
    angle_perp="${prefix}_angle_perp"
    result="${prefix}_X"
    declare "${result}=$(( ${!angle_lat} * ${!angle_perp} ))"       
  fi
done < <(env)

关于Bash:遍历名称中包含模式的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25765282/

相关文章:

python - 有没有办法每次使用 for 循环调用列表中的项目?

linux - 如何从 bash 脚本中确定 IP 地址?

bash ;条件语句回显数字

linux - 希望在所有服务器上仅提供一次密码

java - 检查类名不应包含特定文本

php - PHP 中变量周围的括号有什么作用?

Javascript - 设置全局变量

python - 无法在 Windows 10 "Permission denied"上运行 Python 3.7

javascript 如何 foreach 循环遍历数组

c++ - GCC 标准库实现中(void)强制转换的目的是什么?