bash 中具有多个条件的 For 循环
For loop with multiple conditions in bash
首先,我已经阅读了问题 for loop with multiple conditions in Bash scripting,但它不适用于我打算做的事情。在下面的脚本中,第一个 for 循环将 f 数量的数组分配给一对变量(CON_PERC 和 CON_NAME)
f=0
for i in "${container[@]}"; do
CON_PERC[$f]=$(awk '{print int(+0)}' <<< ="${container[$f]}") #CON_PERC[0] = 2; CON_PERC[1] = 0
CON_NAME[$f]=$(awk '{print }' <<< "${container[$f]}") #CON_NAME[0] = hi; CON_NAME[1] = bye
((f++))
done
我现在需要做的是在一个单独的循环中,检查两个变量的每个数组并打印它们。最好的方法是什么?
我最难的是这样的
e=0
for ((x in "$CON_PERC[@]" && z in "$CON_NAME[@]")); do
echo "${CON_NAME[$e]} ${CON_PERC[$e]}"
((e++))
done
但似乎 for ((i in "$CON_PERC[@]" && e in "$CON_NAME[@]")) 在 bash.
中无效
问题是,解决这个问题的最佳方法是什么,我应该专门使用嵌套循环还是其他方法?
您需要像这样嵌套它们(在您的示例中未经测试)
for x in "$CON_PERC[@]";
do
for z in "$CON_NAME[@]";
do
echo ${CON_NAME[$e]} ${CON_PERC[$e]}
((e++))
done
done
例如:
for x in {a..b};
do
for y in {c..d};
do
echo $x $y
done
done
结果:
a c
a d
b c
b d
这里有一种方法:
#!/bin/bash
CON_PERC=(1 2 3)
CON_NAME=("Hello" "Hallo" "Hola")
for item in "${CON_PERC[@]}" "${CON_NAME[@]}"
do
printf "Item : $item\n"
done
这将打印:
Item : 1
Item : 2
Item : 3
Item : Hello
Item : Hallo
Item : Hola
希望对您有所帮助!
编辑:
如果您愿意,也可以使用传统的 for 循环。我假设两个数组的大小相同:
#!/bin/bash
CON_PERC=(1 2 3)
CON_NAME=("Hello" "Hallo" "Hola")
for (( i=0 ; i < "${#CON_PERC[@]}"; i++ ))
do
echo "${CON_PERC[i]} : ${CON_NAME[i]}"
done
您可以遍历其中一个数组的数组键并使用该键获取值:
CON_PERC=( 01 02 03 04 )
CON_NAME=( one two three four )
for i in "${!CON_NAME[@]}"; do
printf '%s %s\n' "${CON_NAME[i]}" "${CON_PERC[i]}"
done
输出:
one 01
two 02
three 03
four 04
首先,我已经阅读了问题 for loop with multiple conditions in Bash scripting,但它不适用于我打算做的事情。在下面的脚本中,第一个 for 循环将 f 数量的数组分配给一对变量(CON_PERC 和 CON_NAME)
f=0
for i in "${container[@]}"; do
CON_PERC[$f]=$(awk '{print int(+0)}' <<< ="${container[$f]}") #CON_PERC[0] = 2; CON_PERC[1] = 0
CON_NAME[$f]=$(awk '{print }' <<< "${container[$f]}") #CON_NAME[0] = hi; CON_NAME[1] = bye
((f++))
done
我现在需要做的是在一个单独的循环中,检查两个变量的每个数组并打印它们。最好的方法是什么?
我最难的是这样的
e=0
for ((x in "$CON_PERC[@]" && z in "$CON_NAME[@]")); do
echo "${CON_NAME[$e]} ${CON_PERC[$e]}"
((e++))
done
但似乎 for ((i in "$CON_PERC[@]" && e in "$CON_NAME[@]")) 在 bash.
中无效问题是,解决这个问题的最佳方法是什么,我应该专门使用嵌套循环还是其他方法?
您需要像这样嵌套它们(在您的示例中未经测试)
for x in "$CON_PERC[@]";
do
for z in "$CON_NAME[@]";
do
echo ${CON_NAME[$e]} ${CON_PERC[$e]}
((e++))
done
done
例如:
for x in {a..b};
do
for y in {c..d};
do
echo $x $y
done
done
结果:
a c
a d
b c
b d
这里有一种方法:
#!/bin/bash
CON_PERC=(1 2 3)
CON_NAME=("Hello" "Hallo" "Hola")
for item in "${CON_PERC[@]}" "${CON_NAME[@]}"
do
printf "Item : $item\n"
done
这将打印:
Item : 1
Item : 2
Item : 3
Item : Hello
Item : Hallo
Item : Hola
希望对您有所帮助!
编辑:
如果您愿意,也可以使用传统的 for 循环。我假设两个数组的大小相同:
#!/bin/bash
CON_PERC=(1 2 3)
CON_NAME=("Hello" "Hallo" "Hola")
for (( i=0 ; i < "${#CON_PERC[@]}"; i++ ))
do
echo "${CON_PERC[i]} : ${CON_NAME[i]}"
done
您可以遍历其中一个数组的数组键并使用该键获取值:
CON_PERC=( 01 02 03 04 )
CON_NAME=( one two three four )
for i in "${!CON_NAME[@]}"; do
printf '%s %s\n' "${CON_NAME[i]}" "${CON_PERC[i]}"
done
输出:
one 01
two 02
three 03
four 04