Antes de mais nada, vamos desacoplar a leitura da linha de texto usando uma variável:
text="line-1 line-2" ### Just an example.
read -p "$text" REPLY
Desta forma, o problema torna-se: Como atribuir duas linhas a uma variável.
Claro, uma primeira tentativa para fazer isso é:
a="line-1 \
line-2"
Escrito assim, o var a
na verdade recebe o valor line-1 line-2
.
Mas você não gosta da falta de recuo que isso cria, bem, então podemos tentar ler as linhas no var a partir de um aqui-doc (esteja ciente de que as linhas recuadas dentro do aqui-doc precisam de uma aba, não espaços, para funcionar corretamente):
a="$(cat <<-_set_a_variable_
line-1
line-2
_set_a_variable_
)"
echo "test1 <$a>"
Mas isso falharia, já que, na verdade, duas linhas são gravadas em $a
.
Uma solução alternativa para obter apenas uma linha pode ser:
a="$( echo $(cat <<-_set_a_variable_
line 1
line 2
_set_a_variable_
) )"
echo "test2 <$a>"
Isso é próximo, mas cria outros problemas adicionais.
Solução correta.
Todas as tentativas acima apenas tornarão esse problema mais complexo que precisa ser.
Uma abordagem muito básica e simples é:
a="line-1"
a="$a line-2"
read -p "$a" REPLY
O código para o seu exemplo específico é (para qualquer shell cujo read
suporta -p
):
#!/bin/dash
a="goat can try change directory if cd fails to do so."
a="$a Would you like to add this feature? [Y|n] "
# absolute freedom to indent as you see fit.
read -p "$a" REPLY
Para todos os outros shells, use:
#!/bin/dash
a="goat can try change directory if cd fails to do so."
a="$a Would you like to add this feature? [Y|n] "
# absolute freedom to indent as you see fit.
printf '%s' "$a"; read REPLY