Comando "rev": quiero invertir solo $string pero también invierte todo antes de $string

Comando "rev": quiero invertir solo $string pero también invierte todo antes de $string
read -p "Input a sentence: " mystring
string=("$mystring" | rev)
echo "The sentence reversed character by character is: " $string

Quiero revertir solo $string pero invierte todo antes de $string. ¿Alguien puede ayudarme por favor?

Respuesta1

Debe alimentar la cadena como entrada estándar rev, ya sea usando un herestring o heredoc o canalizando la salida de printfy luego recopilando la salida de revusandosustitución 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"

Tenga en cuenta que revno es un comando estándar (aunque es bastante común). Si hubiera usado zshen lugar de bash, podría haber hecho la inversión internamente (y también poder permitir que el usuario ingrese cualquier cosa):

mystring=
vared -p 'Input a sentence: ' mystring
string=${(j[])${(s[]Oa)mystring}}
print -r The sentence reversed character by character is: $string

(tenga en cuenta que dado que zsh's vared, a diferencia de bash's, read -epermite al usuario incluir caracteres de nueva línea (y cualquier carácter, incluso NUL) en el contenido del vararchivo que se edmuestra, usarlo revpara revertirlo no funcionaría, ya que revfunciona en una línea a la vez. tiempo).

En bash, recuerda:

información relacionada