¿Convertir una variable de matriz bash en una cadena delimitada con `.`?

¿Convertir una variable de matriz bash en una cadena delimitada con `.`?

No es un duplicado depregunta.

Estoy intentando crear un patrón semvar (1.0.0) a partir de una matriz que tiene 1,0,0 como elementos y crear una etiqueta git git tag $var.

Error: - La solución anterior simplemente no funciona .solo, está dando 1 0 0espacios separados.

4 13 0
fatal: too many params

Error con el comando de etiqueta git.

Acercarse:-

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

Sugiera una mejor manera de hacerlo.

Respuesta1

Supongo que el shell que se ejecuta echo $vary git tag $varutiliza IFS=.también. Note var=$(IFS=.;…)no puede cambiar el valor de la variable en el shell actual, por lo que este inesperado IFSdebe haberse configurado antes, probablemente durante algunas pruebas y errores.

Si estoy en lo cierto, la variable nombrada varcontiene el valor esperado con puntos, por ejemplo 1.0.0. Pero cuando lo recuperas así

echo $var

la corriente IFSse usa para dividir 1.0.0en palabras, por lo que echorecibe tres argumentos separados: 1, 0, 0. Y debido a que echoimprime sus argumentos con espacios simples entre ellos, tenías la impresión de que el valor de varera 1 0 0.

Esta línea

echo "$var"

no depende de IFS. Espero que te lo muestre 1.0.0.


Una solución general es poner las variables entre comillas dobles. Túdebería haberlo hecho de todos modos:

echo "$var"
git tag "$var"

También preste atención a IFS. Ahora debería quedar claro echo $IFSque no le mostrará cuál es la variable; echo "$IFS"es mejor. Además estos métodos son útiles:

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

información relacionada