簡體   English   中英

使用 for 循環將變量連接成由逗號分隔的單個變量

[英]concatenate variable into single variable separated by comma with for loop

我想使用 for 循環將值添加到變量中,以逗號分隔。 第一個值應該保持在第一個,依此類推。

for ((i=0; i<${#MYARRAY[@]}; i++));
do
  ALL=$ALL$MYARRAY$i,
done
echo $ALL

我期望輸出 val1,val2,val3 但實際輸出是 val1,val2,val3,

如何避免最后一個值后面的逗號?

https://www.tldp.org/LDP/abs/html/string-manipulation.html是一個很好的來源。 循環后插入以下行。

ALL=${ALL%,}

在此示例中,第一次迭代不會在$ALL放置逗號。 在下面的迭代中,逗號放在值之前。 這樣,輸出字符串末尾就不會有任何逗號。

MYARRAY=(val val val)
for (( i=0; i<${#MYARRAY[@]}; i++ ))
do
    if [ $i == 0 ]
    then
        ALL=$ALL$MYARRAY$i
    else
        ALL=$ALL,$MYARRAY$i
    fi
done
echo $ALL

這正是[*]構造的用途:

myarray=(val1 val2 val3 val4)

oldIFS="$IFS"

IFS=',' 
echo "${myarray[*]}"

IFS="$oldIFS"

得到:

val1,val2,val3,val4

我使用小寫myarray因為大寫應該保留為系統(bash)變量。

請注意, "${myarray[*]}" 必須在雙引號內,否則您無法獲得連接魔法。 元素由IFS的第一個字符連接,默認情況下是一個空格。

只需在for循環后添加三個語句中的一個:

  1. ALL=${ALL%,}

  2. ALL=${ALL::-1}

  3. ALL=${ALL%?}

另一種選擇是使用 translate ( tr ) 命令。 例如:

$ myarray=(val1 val2 val3 val4)

$ echo ${myarray[*]}
val1 val2 val3 val4

$ myarray=$(echo ${myarray[*]} | tr ' ' ,)     # Replace space with ','

$ echo $myarray                                # Gives what you need
val1,val2,val3,val4

暫無
暫無

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

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