[英]Assign variable separated by comma based on user input using function
[英]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循環后添加三個語句中的一個:
ALL=${ALL%,}
ALL=${ALL::-1}
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.