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 printf
y luego recopilando la salida de rev
usandosustitució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 rev
no es un comando estándar (aunque es bastante común). Si hubiera usado zsh
en 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 -e
permite al usuario incluir caracteres de nueva línea (y cualquier carácter, incluso NUL) en el contenido del var
archivo que se ed
muestra, usarlo rev
para revertirlo no funcionaría, ya que rev
funciona en una línea a la vez. tiempo).
En bash
, recuerda:
- Las expansiones de parámetros deben citarse. En su
echo
línea, citó partes que no necesitaban cotizarse y omitió las comillas en el único lugar donde eran necesarias. - Para leer una línea, es
IFS= read -r line
.read line
hace algo completamente diferente. echo
no se puede utilizar para generar datos arbitrarios. Usarprintf
en su lugar.