The rules for forming a command from an expression are the same as those for forming expressions. Be careful with symbols that are used in Rexx and Windows programs. The dir&per;cmd program below shows how Rexx evaluates a command when the command name and a variable name are the same:
/* dir&per;cmd - assign a value to the symbol DIR */ |
say "DIR command using Rexx" |
dir = "echo This is not a directory." |
/* pass the evaluated variable to Windows */ |
dir |
Because dir is a variable that contains a string, the string is passed to the system. The DIR command is not executed. Here are the results:
[C:\\]rexx dir&per;cmd |
DIR command using Rexx: |
This is not a directory. |
[C:\\] |
Rexx evaluates a literal string--a string enclosed in matching quotation marks--exactly as it is. To ensure that a symbol in a command is not evaluated as a variable, enclose it in matching quotation marks as follows:
/* assign a value to the symbol DIR */ |
say "DIR command using Rexx" |
dir = "echo This is another string now." |
/* pass the literal string "dir" to Windows */ |
"dir" |
Rexx displays a directory listing.
The best way to ensure that Rexx passes a string to the system as a command is to enclose the entire clause in quotation marks. This is especially important when you use symbols that Rexx uses as operators.
If you want to use a variable in the command string, leave the variable outside the quotation marks. For example:
extension = "BAK" |
"delete |
option = "/w" |
"dir" option |