Sustitución de la variable bash de la variable seguida de guión bajo

12

La variable BUILDNUMBERse establece en el valor 230. Espero que 230_se imprima para el comando, echo $BUILDNUMBER_pero la salida está vacía como se muestra a continuación.

# echo $BUILDNUMBER_

# echo $BUILDNUMBER
230
Talespin_Kit
fuente

Respuestas:

27

El comando echo $BUILDNUMBER_imprimirá el valor de la variable $BUILDNUMBER_que no está establecida (el guión bajo es un carácter válido para un nombre de variable como lo señala Jeff Schaller explícitamente)

Solo necesita aplicar llaves (llaves) alrededor del nombre de la variable o usar la printfherramienta más rígida :

echo "${BUILDNUMBER}_"
printf '%s_\n' "$BUILDNUMBER"

PD: Siempre cita tus variables.

George Vasiliou
fuente
1
La documentación y el estándar usan el término "nulo" para una variable establecida en una cadena vacía (en oposición a una variable no establecida). Me tomé la libertad de editar.
ilkkachu
8

Como ya explicó George Vassiliou , es porque está imprimiendo la variable en $BUILDNUMBER_lugar de $BUILDNUMBER. La mejor manera de obtener lo que quieres es usar ${BUILDNUMBER}_como explicó George. Aquí hay algunas opciones más:

$ echo "$BUILDNUMBER"_
230_
$ echo $BUILDNUMBER"_"
230_
$ printf '%s_\n' "$BUILDNUMBER"
230_
terdon
fuente
Sabemos qué contiene la variable, pero no sabemos qué $IFScontiene, por echo $BUILDNUMBER"_"lo que todavía está mal. De los tres, solo printf '%s_\n' "$BUILDNUMBER"es correcto si no sabemos qué $BUILDNUMBERo qué $IFS.
Stéphane Chazelas