簡體   English   中英

bash中具有多個條件的for循環

[英]For loop with multiple conditions in bash

首先,我在 Bash 腳本中閱讀了具有多個條件的循環問題但它不適用於我打算做的事情。 在以下腳本中,第一個 for 循環將f個數組分配給一對變量( CON_PERC 和 CON_NAME

f=0
for i in "${container[@]}"; do
CON_PERC[$f]=$(awk '{print int($2+0)}' <<< ="${container[$f]}") #CON_PERC[0] = 2; CON_PERC[1] = 0
CON_NAME[$f]=$(awk '{print $1}' <<< "${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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM