read -p "Input a sentence: " mystring
string=("$mystring" | rev)
echo "The sentence reversed character by character is: " $string
I want to reverse only $string but it reverses everything before $string to. Can someone help me pls?
read -p "Input a sentence: " mystring
string=("$mystring" | rev)
echo "The sentence reversed character by character is: " $string
I want to reverse only $string but it reverses everything before $string to. Can someone help me pls?
You need to feed the string as standard input to rev
, either using a herestring or heredoc or by piping the output of printf
and then collect the output of rev
using command substitution.
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"
Note that rev
is not a standard command (though is pretty common). Had you used zsh
instead of bash
, you could have done the reversing internally (and also be able to let the user enter anything):
mystring=
vared -p 'Input a sentence: ' mystring
string=${(j[])${(s[]Oa)mystring}}
print -r The sentence reversed character by character is: $string
(note that since zsh
's vared
, as opposed to bash
's read -e
allows the user to include newline characters (and any character, even NUL) in the contents of the var
that is ed
ited, using rev
to reverse it would not work as rev
works on one line at a time).
In bash
, remember:
echo
line, you had quoted parts that didn't need quoted, and omitted the quotes in the only place where they were needed.IFS= read -r line
. read line
does something completely different.echo
can't be used to output arbitrary data. Use printf
instead.
$mystring
as a command. Try$(echo $mystring | rev)
for better results. It would also help to give a sample input and expected output. – doneal24 Oct 25 '21 at 19:13