Maneira sucinta de responder a entrada do usuário?

6

Claro que você pode fazer esse tipo de coisa,

read var; if [[ $var = 'y' ]]; then echo "Yes"; fi

Mas existe alguma maneira de pular o primeiro passo e fazer algo um pouco mais assim (idealmente sem precisar de um subshell):

if [[ $(read var) = 'y' ]]; then echo "Yes"; fi

Claro que o acima não funciona a menos que você adicione echo , mas eu estou procurando por algo muito mais limpo e simples do que isso:

if [[ $(read var; echo "$var") = 'y' ]]; then echo "Yes"; fi

Seria ideal se isso funcionasse:

if [[ read = 'y' ]]; then echo "Yes"; fi
    
por iconoclast 01.08.2014 / 20:41

3 respostas

3

Que tal usar uma função para fazer o que você precisa:

user_input () {
    read var
    echo $var
}
if [ "$(user_input)" = 'y' ]; then echo "Yes"; fi

No topo, defino uma função chamada user_input, que lerá o valor e depois fará o eco. Em seguida, a instrução if é capaz de obter esse valor e verificar se é 'y'. Eu coloquei o $(user_input) entre aspas, caso o usuário coloque espaços, para que o script não seja apenas um erro.

    
por 01.08.2014 / 22:22
2

Não tenho certeza se isso ainda é muito longo para o que você tinha em mente:

read foo && [ "$foo" = 'y' ] && echo 'Yes'
    
por 01.08.2014 / 21:37
1

com zsh :

read -q && echo yes

(consulte também -s para suprimir o eco do y ou n que você digitar).

    
por 01.08.2014 / 23:01

Tags