【问题标题】:In Bash, how to loop over a vector of values?在 Bash 中,如何遍历值向量?
【发布时间】:2018-06-21 05:57:13
【问题描述】:

我目前有 3 个变量设置为 true 或 false。我有 5 个这样的场景:

var1 = T; var2 = T; var3 = T
var1 = T; var2 = T; var3 = F
var1 = F; var2 = T; var3 = F
var1 = F; var2 = F; var3 = T
var1 = F; var2 = F; var3 = F

我想在我的 bash 脚本中创建一个循环,该循环能够遍历上述 5 个场景并相应地设置变量。有没有办法将所有内容放在类似矩阵的数组中并调用它们?如果我这样做:

for var1 in T F; do for var2 in T F; do for var3 in T F; do
# execute whatever here.....
done
done
done

这显然超出了我的要求,如果我将其扩展到许多变量和许多场景,它变得不可行。总之,我希望为每个循环设置三个变量,其中包含 5 个场景中的每个场景中的值。有没有办法在 bash 脚本中对此进行编程?谢谢。

【问题讨论】:

  • 由于三个变量中只有五个“场景”,而不是通常情况下的全部八个,因此必须有一些关于这些“场景”和可能组合的特殊规则。您需要先说明这些规则才能开始。
  • 您通常会看到使用 3 索引数组完成此操作。例如。 var1=(T T F F F); var2=(T T T F F); var3=(T F F T F); 然后使用 C 样式循环 for ((i = 0; i < ${#var1[@]}; i++)); do if [ "${var1[i]}" = 'T' ] && [ "${var2[i]}" = 'T' ] && [ "${var3[i]}" = 'T' ]; then .... elif ....fi; done 或者您可以使用 case 语句来检查值。通过为每个使用索引数组,您可以协调检查每个数组中的每条记录,例如所有0 元素,然后所有1 元素,等等...(您还可以包括检查以确保每个数组/向量具有相同数量的元素)
  • 写一个函数f()然后做f 1 1 1然后f 1 1 0等等

标签: arrays bash loops


【解决方案1】:

这里有一些想法......


循环输入

line=1
while read var1 var2 var3; do
   echo $line: $var1, $var2, $var3
   ((line+=1))
done <<EOF
T T T
T T F
F T F
F F T
F F F
EOF

输出

1: T, T, T
2: T, T, F
3: F, T, F
4: F, F, T
5: F, F, F

循环输入

line=1
cat <<EOF |
T T T
T T F
F T F
F F T
F F F
EOF

while read var1 var2 var3; do
   echo $line: $var1, $var2, $var3
   ((line+=1))
done

输出

1: T, T, T
2: T, T, F
3: F, T, F
4: F, F, T
5: F, F, F

使用函数

func(){
   var1=$1; var2=$2; var3=$3
   echo $var1, $var2, $var3
}

func 1 1 1
func 1 1 0
func 0 1 0
func 0 0 1
func 0 0 0

输出

1, 1, 1
1, 1, 0
0, 1, 0
0, 0, 1
0, 0, 0

【讨论】:

    【解决方案2】:

    你想要达到的目标应该可以通过数组来实现

    http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_10_02.html

    然后在二维矩阵中声明你的场景并循环它

    How to declare 2D array in bash

    【讨论】:

      猜你喜欢
      • 2021-08-26
      • 2015-10-07
      • 1970-01-01
      • 2018-12-29
      • 2017-07-07
      • 2015-08-17
      • 2014-06-11
      • 2021-02-27
      • 1970-01-01
      相关资源
      最近更新 更多