======Syntax of the ircII language:====== The ircII language is organized into //blocks//. A //block// is a sequence of //statements// separated by semicolons. A //statement// is one of the following * A //command statement// * An //expression statement// * A //block statement// * A //block with arglist statement// A //command statement// is of the form command arguments The //command// is separated from the //arguments// by a [[space character]]. The //command// is either an [[alias command|alias]] or a //built-in command//. A //expression statement// is of the form @expression or (expression) The [[expressions|expression]] is evaluated, but its return value is ignored. A //block statement// is of the form { block } which allows you to nest [[block]]s anywhere you need them. A //block with arglist statement// is of the form (arglist) { block } which allows you to assign $* to local variables before a block. This only modifies $* during the statement itself; $* goes back to its original value after the statement. The local variables that (arglist) creates are normal local variables and will continue to live on. =====Expando substitution:===== All //command statements// undergo expando-substitution ($'s are expanded) before the //command// is separated from the //arguments//. This is a deliberate feature that allows you to use variables as commands. This expansion is global over the entire statement and occurs regardless of what the command actually ends up being. There is no way to override this on a command-by-command basis. //Expression statements// do not undergo expando-substitution, although some operators do permit expandos to be operands. Those expandos are expanded on a case-by-case basis by the expression parser. //Block statements// never undergo expando-substitution, although any //command statements// contained within will be as they are executed. ======History:====== The //block with arglist statement// first appeared in EPIC5-2.1.6.