Como capturar o retorno de carro / alimentação de linha na instrução case

1

Eu tentei o seguinte sem sucesso e não encontrei nenhuma documentação.

read Option
case $Option in
    [1] ) echo "1" ;;
    [2] ) echo "2" ;;
    [$'\n'] ) echo "LF" ;;
    [0] ) exit ;;
    * ) echo "Invalid input" ;;
esac

O seguinte funciona embora.

$ x="                                         
> "
$ if [ "$x" = $'\n' ]; then echo "newline"; fi
newline
    
por 1.61803 10.09.2015 / 21:33

2 respostas

5

Como read apenas lê uma única linha de entrada, sans newline, você só quer verificar a string vazia:

read Option
case $Option in
    1 ) echo "1" ;;
    2 ) echo "2" ;;
    "" ) echo "LF" ;;
    0 ) exit ;;
    * ) echo "Invalid input" ;;
esac

[1] e 1 (e da mesma forma para as outras classes de um caractere) correspondem às mesmas strings que os padrões.

    
por 10.09.2015 / 22:34
2

read irá removê-lo. A declaração do caso em si funciona.

#read Option
Option='
'
case "$Option" in
    [1] ) echo "1" ;;
    [2] ) echo "2" ;;
    [$'\n'] ) echo "LF" ;;
    [0] ) exit ;;
    * ) echo "Invalid input" ;;
esac
#Outputs: LF
    
por 10.09.2015 / 22:34