Comando "rev": quero reverter apenas $string, mas ele reverte tudo antes de $string também

Comando "rev": quero reverter apenas $string, mas ele reverte tudo antes de $string também
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 printfe depois coletando a saída de revusandosubstituiçã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 revnão é um comando padrão (embora seja bastante comum). Se você tivesse usado zshem 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 -epermite ao usuário incluir caracteres de nova linha (e qualquer caractere, até mesmo NUL) no conteúdo do varque está editado, usar revpara reverter não funcionaria, pois revfunciona em uma linha por vez tempo).

Em bash, lembre-se:

informação relacionada