read -p "Input a sentence: " mystring
string=("$mystring" | rev)
echo "The sentence reversed character by character is: " $string
Quero reverter apenas $string, mas ele inverte tudo antes de $string. Alguém pode me ajudar, por favor?
Responder1
Você precisa alimentar a string como entrada padrão para rev
, usando um herestring ou heredoc ou canalizando a saída de printf
e depois coletando a saída de rev
usandosubstituição de comando.
IFS= read -rep 'Input a sentence: ' mystring
string=$(
rev <<< "$mystring"
)
# or:
string=$(
printf '%s\n' "$mystring" | rev
)
printf '%s\n' "The sentence reversed character by character is: $string"
Observe que rev
não é um comando padrão (embora seja bastante comum). Se você tivesse usado zsh
em vez de bash
, poderia ter feito a reversão internamente (e também permitir que o usuário inserisse qualquer coisa):
mystring=
vared -p 'Input a sentence: ' mystring
string=${(j[])${(s[]Oa)mystring}}
print -r The sentence reversed character by character is: $string
(observe que, como zsh
's vared
, ao contrário de bash
's, read -e
permite ao usuário incluir caracteres de nova linha (e qualquer caractere, até mesmo NUL) no conteúdo do var
que está ed
itado, usar rev
para reverter não funcionaria, pois rev
funciona em uma linha por vez tempo).
Em bash
, lembre-se:
- expansões de parâmetros devem ser citadas. Na sua
echo
linha, você citou partes que não precisavam ser citadas e omitiu as aspas no único lugar onde eram necessárias. - Para ler uma linha, é
IFS= read -r line
.read line
faz algo completamente diferente. echo
não pode ser usado para gerar dados arbitrários. Useprintf
em vez disso.