O eco não está imprimindo o valor correto para uma variável

4

Eu tenho uma variável no meu script de shell que não está sendo resolvida corretamente em tempo de execução:

Entrada

#!/bin/sh
SERVER_ERL_ARGS="+K true +A30 +P 1048576 \
     -kernel inet_default_connect_options [{nodelay,true}]"
echo ${SERVER_ERL_ARGS}

Saída:

+K true +A30 +P 1048576 -kernel inet_default_connect_options a

Qualquer motivo por trás desse tipo de comportamento e como posso corrigi-lo.

    
por shashanth r v 11.10.2017 / 13:55

1 resposta

15

Você não citou a expansão de variável em seu echo e tem um arquivo chamado a no diretório atual.

O [{nodelay,true}] age como um padrão de globbing de nome de arquivo que corresponderá a qualquer arquivo cujo nome seja qualquer caractere único dentro de [...] . No seu caso, ele corresponde ao nome do arquivo chamado a no diretório atual.

Então, cite a variável, mas seria ainda melhor usar printf :

printf '%s\n' "$SERVER_ERL_ARGS"

Observe também que ${variable} é exatamente equivalente a $variable em todos os casos, exceto quando a expansão é parte de uma string onde o caractere imediatamente a seguir é válido em um nome de variável, como em "${variable}x" .

Veja também:

por 11.10.2017 / 14:07