bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#59666: 29.0.50; Eshell: comparisons such as {> 3 2} do not work in E


From: Milan Zimmermann
Subject: bug#59666: 29.0.50; Eshell: comparisons such as {> 3 2} do not work in Eshell context
Date: Thu, 1 Dec 2022 20:38:43 -0500

Thanks for your detailed follow up.

I understand what is happening, and am closing this issue (please reopen if you see fit).

In the closing notes, I have a suggestion (slash question), and a summary of how to use CONDITIONAL in the 'if' statement - in case it can be of use for someone reading later.

****** Suggestion / question

Would it be reasonable to suggest removing existing functionality as follows:

In the statement

if     CONDITIONAL { TRUE-COMMANDS } { FALSE-COMMANDS }

The CONDITIONAL can only have the following forms:

1. ${command-call}
2. ${function-call}

The currently allowed

3. {command-call}
4. (function-call)

would represent syntax error.

(3. is outright wrong as it brings silent invalid results)

By banning 3. and 4., Would Eshell lose the ability to express any semantics that can be achieved using 1. and 2?


****** Math operations using < or < in ~if CONDITIONAL~

~Quote < and >  as \< or \> with backslash OTHERWISE YOU GET AN ERROR, OR SILENTLY INCORRECT BEHAVIOR~

inside () or $() quotes are not needed but do not hurt

Examples:

if ${\< 3 5} {echo YES} {echo NO}   # YES -- correct
if ${< 3 5} {echo YES} {echo NO}    # Eshell thinks it is redirection, so WRONG
if ${> 3 5} {echo YES} {echo NO}    # YES - WRONG!!! (silently)

if $(< 3 5) {echo YES} {echo NO} # YES -- correct
if $(> 3 5) {echo YES} {echo NO} # NO  -- correct
if (< 3 5) {echo YES} {echo NO} # YES -- correct
if (> 3 5) {echo YES} {echo NO} # NO -- correct

****** Flow control: TL;DR of ~if CONDITIONAL~
 
- Bad:  Do NOT use ~if {function-call}~ (abbreviated, ~if {}~)
- Good: Do use     ~if ${function-call}~  or  ~if $(function-call)~ or ~if (function-call)~

 
Examples"
- Bad  use:  ~if {= 3 0}  { echo YES } { echo NO }~  # YES -- WRONG!!! (silently!!)
- Good use:  ~if ${= 3 0} { echo YES } { echo NO }~  # NO -- correct

****** Flow control: Recipe of ~if CONDITIONAL~

In flow control ~if CONDITIONAL {TRUE-COMMANDS} {FALSE-COMMANDS}~: do NOT USE the ~{}~ BLOCK as CONDITIONAL; instead use ~the ${}~, ~$()~ or ~()~ blocks. The ~$~ versions are preferred.

The above recipy also applies to ~unless~, ~while~ ~until~. (this does not apply to ~for VAR in LIST~ which is described elsewhere)

Thanks,

Milan

reply via email to

[Prev in Thread] Current Thread [Next in Thread]