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
改用。