Captura de entrada inesperada em um único caractere lido no bash [duplicado]

1

Eu tenho um script bash, que, em um ponto, pede ao usuário uma confirmação. Eu faço isso lendo um único caractere, que é então transformado em minúscula e verificado se é 'y'. Se não, o script sai.

Agora, se eu simplesmente pressionar Enter na entrada, obtenho error: unary operator expected . Como posso evitar esse problema ou pegar o erro?

Snippet de código:

echo -ne "Confirm [y/n]: "
read -n1 uc

if [ ${uc,,} != "y" ]
then
    exit 0
fi
    
por boolean.is.null 22.02.2016 / 12:50

1 resposta

5

Esta declaração deve funcionar corretamente:

if [ "${uc,,}" != "y" ]

Explicação: Quando uc está vazio, seu teste é expandido pelo shell da seguinte forma:

if [  != "y" ]

enquanto com as aspas é

if [ "" != "y" ]

Regra geral: Sempre use aspas ao redor das variáveis do shell que contêm strings ao expandi-las; eles podem conter espaços ou estar vazios, o que, quando não está indicado, costuma confundir o comando para o qual eles são passados (muitos parâmetros ausentes).

    
por 22.02.2016 / 12:58