我想使用for循环将值添加到以逗号分隔的变量中。 第一个值应保持在第一位,依此类推。
for ((i=0; i<${#MYARRAY[@]}; i++));
do
ALL=$ALL$MYARRAY$i,
done
echo $ALL
我希望输出 val1,val2,val3 但是actuel的输出是 val1,val2,val3,
如何避免最后一个值后出现逗号?
答案 0 :(得分:0)
https://www.tldp.org/LDP/abs/html/string-manipulation.html是一个很好的来源。在循环后插入以下行。
ALL=${ALL%,}
答案 1 :(得分:0)
在此示例中,第一次迭代未在$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
答案 2 :(得分:0)
这正是[*]
构造的目的:
myarray=(val1 val2 val3 val4)
oldIFS="$IFS"
IFS=','
echo "${myarray[*]}"
IFS="$oldIFS"
给予:
val1,val2,val3,val4
我使用小写的myarray
,因为大写应该保留给系统(bash)变量。
请注意,"${myarray[*]}"
必须用双引号引起来,否则您将无法获得加入魔术。元素由IFS
的第一个字符连接,默认情况下为空格。
答案 3 :(得分:0)
只需在for循环后添加以下三个语句之一:
ALL=${ALL%,}
ALL=${ALL::-1}
ALL=${ALL%?}