Linux Bash for循环没有正确理解变量?

Linux Bash for循环没有正确理解变量?,linux,bash,Linux,Bash,如何增加已在bash中定义的变量?我的意思是: ID1="YAY1" ID2="YAY2" for (( c=1; c<=3; c++ )) do if [ "$SOMEOTHERVAR" = "ID$c" ]; then BLAH; fi done PEMAIL和SEMAIL是在脚本的另一部分中从数据库中提取的比较器 在您的示例中,使用数组是有意义的,因为变量的最后一部分无论如何都是整数: declare -a ids ids[1]="YAY1" ids[2]="YAY

如何增加已在bash中定义的变量?我的意思是:

ID1="YAY1"
ID2="YAY2"
for (( c=1; c<=3; c++ ))
  do
    if [ "$SOMEOTHERVAR" = "ID$c" ]; then BLAH; fi
  done

PEMAIL和SEMAIL是在脚本的另一部分中从数据库中提取的比较器

在您的示例中,使用数组是有意义的,因为变量的最后一部分无论如何都是整数:

declare -a ids
ids[1]="YAY1"
ids[2]="YAY2"
for (( c=1; c < 3; c++ )); do
    if [ "$SOMEOTHERVAR" = "${ids[c]}" ]; then
        BLAH
    fi
done

在您的示例中,使用数组是有意义的,因为变量的最后一部分无论如何都是整数:

declare -a ids
ids[1]="YAY1"
ids[2]="YAY2"
for (( c=1; c < 3; c++ )); do
    if [ "$SOMEOTHERVAR" = "${ids[c]}" ]; then
        BLAH
    fi
done

创建一个构建变量名的中间变量(我称之为newVar)。然后取消引用。以下代码将打印“与索引2匹配”

ID1=“YAY1”
ID2=“YAY2”

对于((c=1;c创建一个构建变量名的中间变量(我称之为newVar)。然后取消引用该变量。以下代码将打印“与索引2匹配”

ID1=“YAY1”
ID2=“YAY2”

对于((c=1;c无c型回路的溶液:

ID1="YAY1"
ID2="YAY2"

for name in ${!ID*}; do
  if [ "$SOMEOTHERVAR" == "${!name}" ]; then echo "match for $name"; fi
done

${!ID*}扩展到前缀为“ID”的所有变量的列表。

没有C样式循环的解决方案:

ID1="YAY1"
ID2="YAY2"

for name in ${!ID*}; do
  if [ "$SOMEOTHERVAR" == "${!name}" ]; then echo "match for $name"; fi
done

${!ID*}扩展到前缀为“ID”的所有变量列表。

这是一个完美的解决方案,我本想使用,但我认为bash由于某种原因无法处理数组。可能是因为它无法处理多维数组,这正是我在这个简化示例的第二部分中所需要的。你能给我展示一个使用多维数组的示例吗l数组?我很久以前就放弃了在bash中使用多维数组的尝试,但您再次激发了我的兴趣。非常感谢您的帮助。也就是说,最终我需要将另一个变量与“YAY1”关联起来。一个更好的现实例子是:JS:jsmith@example.com谢谢你的帮助。顺便说一句,我不是要求你为我写这篇文章,只是想把我要完成的事情放在上下文中。谢谢!JD:jdoe@example.com逻辑如下:如果以下变量(例如JD,从脚本的另一个区域提取)=数组中的id(JD),然后将CC字段设置为jdoe@example.comOne最后一个想法。我仍然认为在bash中,如果没有“伪造”,多维数组是不可能的它。也许我要做的最好的方法就是在脚本中使用冒号或逗号分隔的值创建一个小数据库。JD:jdoe@example.com然后用grep和cut做一个while循环来提取所需的信息。我所要做的就是:在数据库中,用户被“选中”将抄送包含在电子邮件警报中。当标记它们时,它们的名称与2个字符的变量JD,JR等绑定。当脚本运行时,它会根据变量ie查看向谁发送抄送。在数据库中,Jane Doe被设置为接收抄送电子邮件,因此数据库中的一个字段被标记为JD。当脚本运行时,它会将该标记JD与inter进行比较nal列出了管理员名单并向Jane Doe发送了电子邮件。我希望这是有意义的…太好了!谢谢你kojiro,你的解决方案最终为我指明了解决方案的正确方向。我在上面发布了我的代码片段(在原始帖子中)所以你可以看到最终的解决方案是什么。这是一个完美的解决方案,我本想使用,但我认为bash由于某种原因不能处理数组。也许它不能处理多维数组,这就是我在这个简化示例的第二部分所需要的。你能给我一个使用多维数组的例子吗?我给出了很久以前,我尝试在bash中使用多维数组,但您再次激发了我的兴趣。非常感谢您的帮助。也就是说,最终我需要将另一个变量与“YAY1”关联起来。一个更好的现实例子是:JS:jsmith@example.com谢谢你的帮助。顺便说一句,我不是要求你为我写这篇文章,只是想把我要完成的事情放在上下文中。谢谢!JD:jdoe@example.com逻辑如下:如果以下变量(例如JD,从脚本的另一个区域提取)=数组中的id(JD),然后将CC字段设置为jdoe@example.comOne最后一个想法。我仍然认为在bash中,如果没有“伪造”,多维数组是不可能的它。也许我要做的最好的方法就是在脚本中使用冒号或逗号分隔的值创建一个小数据库。JD:jdoe@example.com然后用grep和cut做一个while循环来提取所需的信息。我所要做的就是:在数据库中,用户被“选中”将抄送包含在电子邮件警报中。当标记它们时,它们的名称与2个字符的变量JD,JR等绑定。当脚本运行时,它会根据变量ie查看向谁发送抄送。在数据库中,Jane Doe被设置为接收抄送电子邮件,因此数据库中的一个字段被标记为JD。当脚本运行时,它会将该标记JD与inter进行比较nal列出了管理员名单并向Jane Doe发送了电子邮件。我希望这是有意义的…太好了!谢谢你kojiro,你的解决方案最终为我指明了解决方案的正确方向。我在上面发布了我的代码片段(在原始帖子中)因此,您可以看到最终的解决方案是什么。非常好,谢谢您的帮助。没有机会阅读您的建议。已经找到了解决方案。谢谢您!非常好,谢谢您的帮助。没有机会阅读您的建议。已经找到了解决方案。谢谢您!谢谢您的帮助。我尝试了这个想法,但是不幸的是,我无法按需要将这两个变量关联起来。请参阅原始帖子中的更新。谢谢!感谢您的帮助。我一直在尝试这个想法,但不幸的是,我无法按需要将这两个变量关联起来。请参阅原始帖子中的更新。谢谢!
ID1="YAY1"
ID2="YAY2"

for name in ${!ID*}; do
  if [ "$SOMEOTHERVAR" == "${!name}" ]; then echo "match for $name"; fi
done