31

I've got a few csh scripts where I need to check that certain environment variables are set before I start doing stuff, so I do this sort of thing:

if ! $?STATE then
    echo "Need to set STATE"
    exit 1
endif

if ! $?DEST then
    echo "Need to set DEST"
    exit 1
endif

which is a lot of typing. Is there a more elegant idiom for checking whether or not an environment variable is already set?

Notes:

  • This question is quite similar, but specifically asks about solutions in bash.
  • I'm not looking for people to advise me to stay away from csh because it's cursed, scary, or bash is better. I'm specifically interested in a more elegant solution than what I'm using now.
Community
  • 1
  • 1
Pete
  • 10,310
  • 7
  • 53
  • 59
  • [This newer, similar question](http://stackoverflow.com/questions/13343392/how-to-check-if-an-environment-variable-is-either-unset-or-set-to-the-empty-stri) also show how to check in an expression context where if/else/endif is not possible – cfi Oct 01 '15 at 13:42

2 Answers2

22

I think the way you're doing it (an if statement with a condition using the $?VAR syntax, which evaluates to 1 if the variable is set, and 0 otherwise) is probably the most idiomatic csh construct that does what you want.

Jim Lewis
  • 43,505
  • 7
  • 82
  • 96
-6

Try the following:

[ -z STATE ] && echo "Need to set STATE"

[ ! -z DEST  ] && echo "Need to set STATE"
smagnan
  • 1,197
  • 15
  • 29