On Thu, Feb 8, 2018 at 4:27 PM, Jaan Vajakas <jaan.vaja...@gmail.com> wrote:
> So should Bash report a syntax error? > You do not have a syntax error, the rules for quoting inside $( ) are the same as outside, whether you use outside quotes "$( )" or not So in your case you are escaping the double quotes and concatenate the literal character " with the content of your variable, and you end up comparing the 3 characters string <"a"> with b. echo "$(echo \"a\")" # prints "a" the inner double quotes loose their special meaning. > 2018-02-08 15:24 GMT+01:00 Clark Wang <dearv...@gmail.com>: > > > On Thu, Feb 8, 2018 at 9:05 PM, Jaan Vajakas <jaan.vaja...@gmail.com> > > wrote: > > > >> Hi! > >> > >> I noticed a weird behavior. Is it a bug? > >> > >> Namely, why does > >> > >> echo "$(for f in a b c; do if [[ \"$f\" > b ]]; then echo "$f > b"; else > >> echo "$f <= b"; fi; done)" > >> > > > > Should be: > > > > echo "$(for f in a b c; do if [[ $f > b ]]; then echo "$f > b"; else > > echo "$f <= b"; fi; done)" > > > > > >> output > >> > >> a <= b > >> b > b > >> c > b > >> > >> ? > >> > >> I would have expected the same output as one of > >> echo "$(for f in a b c; do if [[ "$f" > b ]]; then echo "$f > b"; else > >> echo > >> "$f <= b"; fi; done)" > >> echo "$(for f in a b c; do if [[ '"$f"' > b ]]; then echo "$f > b"; else > >> echo "$f <= b"; fi; done)" > >> > >> This happens e.g. on GNU Bash v4.4 (e.g. > >> https://www.tutorialspoint.com/execute_bash_online.php ). > >> > >> > >> Best regards, > >> Jaan > >> > > > > >