将变量连接为单个变量,并用for循环用逗号分隔

时间:2019-06-14 09:48:23

标签: linux bash shell

我想使用for循环将值添加到以逗号分隔的变量中。 第一个值应保持在第一位,依此类推。

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

我希望输出 val1,val2,val3 但是actuel的输出是 val1,val2,val3,

如何避免最后一个值后出现逗号?

4 个答案:

答案 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循环后添加以下三个语句之一:

  1. ALL=${ALL%,}

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

  3. ALL=${ALL%?}