
Не дубликатвопрос.
Я пытаюсь создать шаблон 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