Substituição da variável Bash da variável seguida por sublinhado

12

A variável BUILDNUMBERestá configurada para o valor 230. Espero 230_ser impresso para o comando, echo $BUILDNUMBER_mas a saída está vazia, como mostrado abaixo.

# echo $BUILDNUMBER_

# echo $BUILDNUMBER
230
Talespin_Kit
fonte

Respostas:

26

O comando echo $BUILDNUMBER_imprimirá o valor da variável $BUILDNUMBER_que não está definida (sublinhado é um caractere válido para um nome de variável, conforme explicitamente observado por Jeff Schaller)

Você só precisa aplicar chaves (colchetes) ao redor do nome da variável ou usar a printfferramenta mais rígida :

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

PS: sempre cite suas variáveis.

George Vasiliou
fonte
A documentação e o padrão usam o termo "nulo" para uma variável definida como uma sequência vazia (em oposição a uma variável não definida). Tomei a liberdade de editar.
Ilkkachu
8

Como George Vassiliou já explicou , é porque você está imprimindo a variável em $BUILDNUMBER_vez de $BUILDNUMBER. A melhor maneira de conseguir o que deseja é usar ${BUILDNUMBER}_como George explicou. Aqui estão mais algumas opções:

$ echo "$BUILDNUMBER"_
230_
$ echo $BUILDNUMBER"_"
230_
$ printf '%s_\n' "$BUILDNUMBER"
230_
terdon
fonte
Sabemos o que a variável contém, mas não sabemos o que $IFScontém, então echo $BUILDNUMBER"_"ainda está errado. Dos três, única printf '%s_\n' "$BUILDNUMBER"é correto se não sabemos o que $BUILDNUMBERou $IFSespera.
Stéphane Chazelas 31/01/19