Escapando _ $ (sublinhado e cifrão) [duplicado]

2

Eu tenho este script Bash

for i in 1 2 3
do
    for j in 4 5 6
    do
        echo "hello_$i_$j"
    done
done

mas imprime

hello_4
hello_5
ola_6

três vezes, enquanto (você pode imaginar) Eu quero hello_1_4 , hello_1_5 , etc.

Escapar apenas o sublinhado ou apenas o cifrão não funciona. Alguma idéia?

Obrigado!

    
por Jason 22.02.2017 / 01:43

1 resposta

6

Adicione a linha: set -u ao topo do seu código. Em seguida, execute novamente e veja o que você obtém.

O erro que a variável i_ está desvinculada, ou seja, não definida em lugar algum. Agora, por que o bash está falando sobre essa variável i_ ? Você não definiu em nenhum lugar. Observe atentamente sua instrução de eco: "hello_$i_$j" do sublinhado depois que o $ i estiver sendo visto como a variável i_ , pois _ é um caractere de identificador de nome de variável válido.

Portanto, para evitar que o bash faça isso, você precisa colocar o nome da variável entre chaves {} , como asecho "Hello_${i}_${j}", as chaves impedem que o nome da variável se transmita ao _ . Nota: as chaves na variável $j são opcionais, pois o " serve ao propósito de delimitar.

    
por 22.02.2017 / 01:58