“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

(请注意,由于zshs与'vared不同,允许用户在被迭代的内容中包含换行符(以及任何字符,甚至 NUL),因此使用 's来反转它不会像在一行中那样工作。时间)。bashread -evaredrevrev

在 中bash,记住:

相关内容