преобразовать переменную массива bash в строку, разделенную символом `.`?

преобразовать переменную массива bash в строку, разделенную символом `.`?

Не дубликатвопрос.

Я пытаюсь создать шаблон semvar (1.0.0) из массива, содержащего элементы 1,0,0, и создать тег git git tag $var.

Ошибка: - Приведенное выше решение не работает .только для , оно дает 1 0 0, разделенные пробелом.

4 13 0
fatal: too many params

Ошибка команды git tag.

Подход:-

var=$( IFS=$'.'; echo "${versionArray[*]}" )
echo $var
git tag $var  

Предложите, пожалуйста, лучший способ сделать это.

решение1

Я предполагаю, что это оболочка, которая выполняет echo $varи git tag $varиспользует IFS=.также. Примечание var=$(IFS=.;…)не может изменить значение переменной в текущей оболочке, поэтому эта неожиданность, IFSдолжно быть, была установлена ​​ранее, вероятно, во время каких-то проб и ошибок.

Если я прав, переменная с именем varсодержит ожидаемое значение с точками, например 1.0.0. Но когда вы извлекаете его таким образом

echo $var

ток IFSиспользуется для разделения 1.0.0на слова, поэтому echoполучает три отдельных аргумента: 1, 0, 0. И поскольку echoпечатает свои аргументы с одинарными пробелами между ними, у вас сложилось впечатление, что значение varбыло 1 0 0.

Эта линия

echo "$var"

не полагается на IFS. Я ожидаю, что он покажет вам 1.0.0.


Общее решение — заключить переменные в двойные кавычки.в любом случае следовало это сделать:

echo "$var"
git tag "$var"

Также обратите внимание на IFS. Теперь должно быть ясно, echo $IFSчто не будет показывать вам, что это за переменная; echo "$IFS"лучше. Кроме того, полезны эти методы:

printf '%s' "$IFS" | hexdump -c
printf '%s' "$IFS" | hexdump -C
printf '%s' "$IFS" | xxd

Связанный контент