converter uma variável de array bash em uma string delimitada por `.`?

converter uma variável de array bash em uma string delimitada por `.`?

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 0espaç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 $vare git tag $varusa IFS=.também. A nota var=$(IFS=.;…)não pode alterar o valor da variável no shell atual, portanto, esse inesperado IFSdeve ter sido definido anteriormente, provavelmente durante algumas tentativas e erros.

Se estiver certo, a variável nomeada varconté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.0em palavras, portanto echorecebe três argumentos separados: 1, 0, 0. E como echoimprime seus argumentos com espaços simples entre eles, você ficou com a impressão de que o valor de varwas 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 $IFSque 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

informação relacionada