Удалите последнюю запятую после завершения построения строки.
for …
done
step=${step%,}
regions_uspos=${regions_uspos%,}
${ ПЕРЕМЕННАЯ% ШАБЛОН}
расширяется до значенияПЕРЕМЕННАЯ
с кратчайшим суффиксом, соответствующимШАБЛОН}
удален. Эта конструкция поддерживается во всех оболочках POSIX. Он также поддерживается во всех конфигурациях BusyBox.
Если вам нужны промежуточные строки без запятой в конце, вы можете удалить запятую внутри цикла. В качестве альтернативы создайте строки без запятой в конце, добавив запятую перед добавленным элементом. Чтобы избежать начальной запятой, определите первую итерацию в цикле.
first=1
for … do
if [ -n "$first" ]; then
first=
else
step="$step,"
regions_uspos="$regions_uspos,"
fi
step="$step$i"
…
done
Да, очевидно, ответ был следующим:
for i in $var
do
step=$step"region_$i,"
done
step=${step%,}
echo $step
regions_uspos=${regions_uspos%,}
и он был основан на ответе @Gilles
Много способов сделать это. Один из способов - создать новую переменную, например. sep, который изначально пуст и устанавливается в запятую сразу после того, как вы говорите step="$step$sep$i"
.
Другой способ — использовать условное расширение, так что вы говорите
step="${step+${step},}$i"
Где ${имя+значение} расширяется до значения, если установлено имя. В данном случае значением является «$step», если я правильно набираю это на телефоне.
Другой способ — просто удалить первую запятую из переменной после того, как вы накопили в ней значения.