Команда «rev»: Я хочу реверсировать только $string, но она реверсирует все до $string

Команда «rev»: Я хочу реверсировать только $string, но она реверсирует все до $string
read -p "Input a sentence: " mystring
string=("$mystring" | rev)
echo "The sentence reversed character by character is: " $string

Я хочу перевернуть только $string, но он переворачивает все до $string на. Может ли кто-нибудь мне помочь, пожалуйста?

решение1

Вам необходимо передать строку в качестве стандартного ввода в rev, либо используя herestring или heredoc, либо передав вывод по конвейеру, printfа затем собрать вывод с revпомощьюзамена команды.

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"

Обратите внимание, что revэто не стандартная команда (хотя она довольно распространена). Если бы вы использовали zshвместо bash, вы могли бы выполнить обратное преобразование внутри (и также иметь возможность разрешить пользователю вводить что угодно):

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

(обратите внимание, что поскольку zsh's vared, в отличие от bash's , read -eпозволяет пользователю включать символы новой строки (и любые символы, даже NUL) в содержимое ited var, edиспользование revдля его обратного преобразования не будет работать, поскольку revработает с одной строкой за раз).

В bash, помните:

Связанный контент