объединить переменную в одну переменную через запятую - PullRequest
0 голосов
/ 14 июня 2019

Я хочу добавить значения в переменную, разделенные запятой, используя цикл for.Первые значения должны оставаться первыми и т. Д.

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

Я ожидаю, что выходной val1, val2, val3, но выходное значение Actuel является val1, val2, val3,

Как избежать запятой послепоследнее значение?

Ответы [ 4 ]

0 голосов
/ 14 июня 2019

Просто добавьте один из трех операторов после цикла for:

  1. ALL=${ALL%,}

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

  3. ALL=${ALL%?}

0 голосов
/ 14 июня 2019

В этом примере первая итерация не ставит запятую в $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
0 голосов
/ 14 июня 2019

Это именно то, для чего предназначена конструкция [*]:

myarray=(val1 val2 val3 val4)

oldIFS="$IFS"

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

IFS="$oldIFS"

дает:

val1,val2,val3,val4

Я использую строчные буквы myarray, потому что прописные буквы должны быть зарезервированы для системных (bash) переменных.

Обратите внимание, что "${myarray[*]}" должен заключаться в двойные кавычки, иначе вы не получите магию соединения. Элементы объединяются первым символом IFS, который по умолчанию является пробелом.

0 голосов
/ 14 июня 2019

https://www.tldp.org/LDP/abs/html/string-manipulation.html является хорошим источником.Вставьте следующую строку после цикла.

ALL=${ALL%,}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...