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
とは異なり、bash
のread -e
内容に改行文字 (および任意の文字、NUL も含む) を含めることができるvar
ためed
、 をrev
逆に使用しても、 は 1 行ずつしか機能しないことに注意してくださいrev
)。
ではbash
、次の点に注意してください。
- パラメータ展開は引用符で囲む必要があります。あなたの
echo
行では、引用符で囲む必要のない部分が引用符で囲まれており、引用符が必要な場所でのみ引用符が省略されています。 - 行を読むには、
IFS= read -r line
.read line
はまったく違うことをします。 echo
任意のデータを出力するために使用することはできません。printf
代わりに。