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
不同,允许用户在被迭代的内容中包含换行符(以及任何字符,甚至 NUL),因此使用 's来反转它不会像在一行中那样工作。时间)。bash
read -e
var
ed
rev
rev
在 中bash
,记住:
- 参数扩展必须加引号。在您的
echo
行中,您引用了不需要引用的部分,并在唯一需要的地方省略了引号。 - 要读取一行,它是
IFS= read -r line
。read line
做一些完全不同的事情。 echo
不能用于输出任意数据。改用printf
。