「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ヒアストリングまたはヒアドキュメントを使用するか、出力をパイプしてに標準入力として文字列を入力し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( はvaredとは異なり、bashread -e内容に改行文字 (および任意の文字、NUL も含む) を含めることができるvarためed、 をrev逆に使用しても、 は 1 行ずつしか機能しないことに注意してくださいrev)。

ではbash、次の点に注意してください。

関連情報