8

I don't want to use tcsh, but unfortunately have no choice in this situation. So please no "use another shell" answers!

I'm currently trying to check that an environment variable is both set, and that it's set to something useful. So what I want to do is this:

if ($?HAPPYVAR && $HAPPYVAR != "") then ... blah... else if ($?SADVAR && $SADVAR != "") then ... more blah ... endif 

The problem is that if $HAPPYVAR is unset, it will error out on the second half of the expression (because the environment variable replacement happens early). I could use nested ifs, but then I'd have problems getting my "else" to work correctly (I'd have to set another env var to say whether "...blah..." happened or not).

Anyone got any nice, neat solution to doing this?

1
  • while working on the same concept i found that my script does not process if block , it just say that HAPPYVAR: undefined variable and terminates , how can I make it work so that it executes if block ? Commented Oct 8, 2013 at 9:30

1 Answer 1

5

There is probably a nicer way, but you can use eval to delay the execution:

if ($?HAPPYVAR && {eval 'test ! -z $HAPPYVAR'}) then ... blah... else if ($?SADVAR && {eval 'test ! -z $SADVAR'}) then ... more blah ... endif 

This seems to work for your needs.

If test doesn't work or you, this will work too:

if ($?HAPPYVAR && { eval 'if ($HAPPYVAR == "") exit 1' }) then 

Ah, csh.

Sign up to request clarification or add additional context in comments.

1 Comment

Not the elegant solution I was hoping for, but would certainly work. If anyone knows a prettier solution, I'm all ears.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.