
Não é uma duplicata depergunta.
Estou tentando criar um padrão semvar (1.0.0) a partir de um array com 1,0,0 como elementos e criar uma tag git git tag $var
.
Erro: - A solução acima simplesmente não está funcionando .
apenas, está dando 1 0 0
espaço separado.
4 13 0
fatal: too many params
Erro com o comando git tag.
Abordagem:-
var=$( IFS=$'.'; echo "${versionArray[*]}" )
echo $var
git tag $var
Por favor, sugira uma maneira melhor de fazer isso.
Responder1
Meu palpite é o shell que executa echo $var
e git tag $var
usa IFS=.
também. A nota var=$(IFS=.;…)
não pode alterar o valor da variável no shell atual, portanto, esse inesperado IFS
deve ter sido definido anteriormente, provavelmente durante algumas tentativas e erros.
Se estiver certo, a variável nomeada var
contém o valor esperado com pontos, por exemplo 1.0.0
. Mas quando você recupera assim
echo $var
o atual IFS
é usado para dividir 1.0.0
em palavras, portanto echo
recebe três argumentos separados: 1
, 0
, 0
. E como echo
imprime seus argumentos com espaços simples entre eles, você ficou com a impressão de que o valor de var
was 1 0 0
.
Está linha
echo "$var"
não depende IFS
. Espero que isso lhe mostre 1.0.0
.
Uma solução geral é colocar aspas duplas nas variáveis. Vocêdeveria ter feito isso de qualquer maneira:
echo "$var"
git tag "$var"
Preste atenção também IFS
. Agora deve ficar claro echo $IFS
que não mostrará qual é a variável; echo "$IFS"
é melhor. Além disso, estes métodos são úteis:
printf '%s' "$IFS" | hexdump -c
printf '%s' "$IFS" | hexdump -C
printf '%s' "$IFS" | xxd