I've encountered this code written in csh:
if ( ! $?LM_LICENSE_FILE ) then
setenv LM_LICENSE_FILE $_LmLicense
else
switch("$LM_LICENSE_FILE")
case *${_LmLicense}*:
breaksw
default:
setenv LM_LICENSE_FILE "${_LmLicense}:$LM_LICENSE_FILE"
endsw
endif
Please note this line:
if ( ! $?LM_LICENSE_FILE ) then
What does $?
do in $?LM_LICENSE_FILE
?
LM_LICENSE_FILE
is a shell variable (or macro, more precisely), and I know that $LM_LICENSE_FILE
is used to retrieve its value, but a trailing question mark following $
, that is $?LM_LICENSE_FILE
, what is its meaning?
Using variables in a script The $#variable will print out the number of word in the list. And $? variable will return whether it exists. Also, variables names are case sensitive.
You use the set or setenv commands to initialize a variable, where set is used for current shell and setenv for current and any subshells (i.e. it will automatically export variables to subshell). setenv should be used for PATH, HOME, and all other system related environmental settings.
returns the exit value of the last executed command.
The C shell (csh) is a command shell for Unix-like systems that was originally created as part of the Berkeley Software Distribution (BSD) in 1978. Csh can be used for entering commands interactively or in shell scripts.
$?VAR
expands to 1 (true) if $VAR
is set (to anything, even the empty string), 0 (false) if it isn't.
This is documented in the csh manual; follow the link and search for $?
, or type man csh
or man tcsh
.
Oh, and csh doesn't have macros.
if ( ! $?LM_LICENSE_FILE ) then
means if ( LM_LICENSE_FILE has not been assigned with any value.) , then
...
On the other hand, if ( $?LM_LICENSE_FILE ) then
means if ( LM_LICENSE_FILE has been defined or assigned.) then
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With