簡體   English   中英

如何遍歷 shell 中的多個逗號分隔字符串

[英]How to loop through multiple comma separated strings in shell

我試圖循環遍歷多個逗號分隔的字符串,字符串中的逗號數量相同。

我試過下面的代碼片段,但它沒有返回任何東西。

#!/bin/bash
    
ip1=“Ok1,ok2,ok3”
    
ip2=“ty1,ty2,ty3”
    
for i in ${ip[@]//,/} 
do 
        echo $i 
done

有人可以建議我如何改變這一點。

盡快用數組替換逗號分隔的字符串。 如果它是一個硬編碼的字符串,那是微不足道的:

ip1=(Ok1 ok2 ok3)

如果它來自外部源(例如,命令行參數或從文件中讀取),請使用read

ip1s="Ok1,ok2,ok3"
IFS=, read -a ip1 <<< "$ips1"

一旦有了數組,就可以使用數組語法進行迭代:

for i in "${ip1[@]}"; do
    echo "$i"
done

如果你有多個 arrays 想要同步迭代,你可以迭代 arrays 的鍵:

for i in "${!ip1[@]}"; do
  echo "${ip1[i]}"
  echo "${ip2[i]}"
done

(這忽略了稀疏 arrays 的可能性,但您必須努力獲得這些。實際上,具有n元素的 arrays 通常具有鍵 0、1、... n -1。)

修復:

  1. ip ip1或者ip2
  2. 將智能引號更改為常規引號: "
  3. 通過在最后一個/之后添加一個空格來將逗號替換為空格
ip1="Ok1,ok2,ok3"
ip2="ty1,ty2,ty3"
    
for i in ${ip1//,/ }
do 
        echo "$i"
done

最好使用 arrays,這樣項目就會自然地分開,並且您不必進行任何字符串操作。

ip1=(Ok1 ok2 ok3)
ip2=(ty1 ty2 ty3)
    
for i in "${ip1[@]}"
do 
        echo "$i"
done

暫無
暫無

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

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