[SAGE] Shell programming conundrum (fwd)

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: der.hans
Date:  
Subject: [SAGE] Shell programming conundrum (fwd)
moin, moin,

shell programming hints below :).

Actually, here's the consensual explanation for what the code questioned
below does.

First, the ':' at the beginning of the line gets the line to return a true
regardless of how the code does. This might be important for resetting $?,
but I think that wasn't the intent. In any case the rest of the line gets
evaluated.

${foo:=${foo}}

That part says that if $foo doesn't exist it should be set to $foo. Pretty
foolish as the command says to keep the current value if it doesn't exist,
but then assign the non-existant value if it doesn't exist.

There might be a need to make sure $foo exists.

${foo:=}

That does the same thing, but doesn't look ( as much ) like a typo.

The main consensus, though, is that this line should have been commented.
Suggested comments run like the following.

# blah blah depends on $foo being set. This sets $foo to null if $foo
# isn't already set

Maybe also explain why the ':' was tossed in the front.

shell is freakingly powerful :).

Comments are good. Comments explaining why something is done are excellent.
Comments explaing why something obscure was done are necessary.

ciao,

der.hans
--
# https://www.LuftHans.com/
# Magic is science unexplained. - der.hans

---------- Forwarded message ----------
Date: Fri, 2 Aug 2002 12:36:46 -0400 (EDT)
From: Adam S. Moskowitz <>
To: SAGE Members <>
Subject: [SAGE] Shell programming conundrum

Normally, I consider myself an expert in shell programming, but this one
really has me stumped . . .

Consider the following excerpt of code:

    cmd1


    . . .


    cmd23


    : ${foo:=${foo}}    # <== THIS ONE!


    cmd24 $foo


    . . .


Yes, it's legal shell code. Yes, it works (for a very broad definition
of "work").

We don't know the value of "foo"; I claim it doesn't matter.

Here's the challenge: Tell me what purpose the line marked "THIS ONE!"
serves. I claim you can delete that line and the script will produce the
same exact results -- but I'd love for someone to prove me wrong.

AdamM

P.S. - No, I didn't write this; I found it in a script that someone else
       wrote that I now have to modify.