Use “read” no script Bash com uma resposta padrão


3

Como posso usar read com algo como resposta padrão, que o usuário pode mudar através de? (uma resposta padrão)

Respostas:


5

Você escreveria isto:

read -p "enter a value: " -i default -e answer
echo "you answered: $answer"
  • -i default especifica a resposta padrão.
  • -e ativa o modo interativo (edição) para read. Sem essa opção, a resposta padrão não funciona.

Então, não pode editar o valor padrão com bash 3.2. Você poderia fazer isso:

default="the default value"
read -p "your answer [default=$default] " answer
: ${answer:=$default}
echo "you answered: $answer"

Isso usa o valor padrão se o usuário não inserir nada (string vazia)


1
-bash: read: -i: opção inválida read: uso: ler [-ers] [-u fd] [-t timeout] [-p prompt] [-a matriz] [-n nchars] [-d delim] [ nome ...]
Flo

Sua versão do bash? Você está usando bash ou / bin / sh?
glenn jackman

GNU bash, versão 3.2.53 (1) -release (x86_64-apple-darwin14)
Flo

0

Referência ler - ler uma linha da entrada padrão :

Este é um shell BASH embutido.

Uma linha é lida da entrada padrão e a primeira palavra é   atribuído ao primeiro nome, a segunda palavra ao segundo nome, e assim   em diante, com as palavras restantes e seus separadores intervenientes atribuídos a   o ultimo nome.

Se houver menos palavras lidas da entrada padrão do que nomes,   os nomes restantes são atribuídos a valores vazios.

Os caracteres no valor da variável IFS são usados ​​para dividir o   linha em palavras.

O caractere de barra invertida `\ 'pode ser usado para remover qualquer significado especial   para o próximo caractere lido e para continuação de linha.

Se nenhum nome for fornecido, a linha lida é atribuída à variável   RESPOSTA. O código de retorno é zero, a menos que o fim do arquivo seja encontrado ou   leia o tempo limite.

Exemplos

#!/bin/bash
read var_year
echo "The year is: $var_year"

echo -n "Enter your name and press [ENTER]: "
read var_name
echo "Your name is: $var_name"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.