什么是 ! and : 用于 REXX

What is ! and : used for in REXX

什么!和 : 在 REXX 中做。 例如在这段代码中

!all:!!=!;!=space(!);upper !;call !fid;!nt=right(!var('OS'),2)=='NT';!cls=word('CLS VMFCLEAR CLRSCREEN',1+!cms+!tso*2);if arg(1)\==1 then return 0;if wordpos(!,'? ?SAMPLES ?AUTHOR ?FLOW')==0 then return 0;!call=']$H';call '$H' !fn !;!call=;return 1
!cal:if symbol('!CALL')\=="VAR" then !call=;return !call
!env:!env='ENVIRONMENT';if !sys=='MSDOS'|!brexx|!r4|!roo then !env='SYSTEM';if !os2 then !env='OS2'!env;!ebcdic=1=='f0'x;return
!fid:parse upper source !sys !fun !fid . 1 . . !fn !ft !fm .;call !sys;if !dos then do;_=lastpos('\',!fn);!fm=left(!fn,_);!fn=substr(!fn,_+1);parse var !fn !fn '.' !ft;end;return word(0 !fn !ft !fm,1+('0'arg(1)))
!rex:parse upper version !ver !vernum !verdate .;!brexx='BY'==!vernum;!kexx='KEXX'==!ver;!pcrexx='REXX/PERSONAL'==!ver|'REXX/PC'==!ver;!r4='REXX-R4'==!ver;!regina='REXX-REGINA'==left(!ver,11);!roo='REXX-ROO'==!ver;call !env;return
!sys:!cms=!sys=='CMS';!os2=!sys=='OS2';!tso=!sys=='TSO'|!sys=='MVS';!vse=!sys=='VSE';!dos=pos('DOS',!sys)\==0|pos('WIN',!sys)\==0|!sys=='CMD';call !rex;return
!var:call !fid;if !kexx then return space(dosenv(arg(1)));return space(value(arg(1),,!env))

!all:!!=! 在做什么? 在查看这段代码时,我实际上有很多问题,但我想我们会从这里开始,看看它是否对其余部分有所启发。

原始代码示例位于此处http://rosettacode.org/wiki/Terminal_control/Coloured_text#REXX

正如 Ryan Vincent 在评论中的回答:

! 字符只是您可以在“变量名”中使用的另一个字符。因此,您可以使用 ! 而不是 for 循环中的 i。请参阅 documentation 并搜索符号。

:用在'name'的末尾表示它是'label'。参见:12. Subroutines and functions。试图理解显示的“优化代码”将是 'interesting' 但这是可能的。 – Ryan Vincent 4 月 18 日 19:55