Help with files and spaces with shell script

Cameron Simpson cs at zip.com.au
Thu Sep 20 03:56:02 UTC 2007


On 17Sep2007 10:44, Jacques B. <jjrboucher at gmail.com> wrote:
| > Also, you should never name unexported variables with UPPER CASE names.
| >
| > By convention, exported variables haver UPPER CASE names and local variables
| > have lower case names. By following that convention your script variable
| > semantics are more obvious.
| 
| Thanks. I wasn't aware of this.  But makes sense.  By avoiding upper
| case variable names in your script unless it's one you will be
| exporting, you will not accidentally overwrite an environment variable
| which by convention uses upper case names.
| 
| I've been toying with BASH scripting for a few years and did some
| light programming prior to that.  I purchased a book from O'Reilly
| last year called "Learning the bash Shell" 3rd Edition.  In that book
| the author recommended using UPPERCASE variable names when declaring
| constants/read-only variables in your scripts.

Yah. You can think of exported variables as being much like constants - they
define default parameters for things.

| Granted I haven't written any scripts where I've exported a
| variable to the environment shell so it hasn't been an issue.

No, the issue applies to almost all scripts. The catch is that _you_ do
not need to be the person exporting the variable.

Supposing you did not know about the $EDITOR variable, and in a script
to do with a publication set it to the name of someone. And then in that
script invoked an interactive mail command to compose a message or some
kind. The mail program will want to run $EDITOR as the user's preferred
editor program (its conventional UNIX use) for composing the email.

Now, in that scenario you have not exported $EDITOR. But it is quite
possible that the system default provide something like "EDITOR=vi".
If so, $EDITOR is implicitly exported, and your script has just
sabotaged the edit facility in the mail program.

| I noticed that as long as you don't source the script the risk will
| only apply to your script and sub-processes of your script.  So as
| long as you know your script and the commands that it uses well enough
| you should be safe.

and also the commands those subcommands themselves call, and if any of
those commands call a program as the user's discretion (as with $EDITOR
above, or via a mailcap file association) then you must magicly know all
about any command the user may be caused to be triggered even
indirectly.

| But your reason for not using it is a prudent one
| worth adopting.  Is there an acceptable practice for
| constants/read-only variables?

Maybe start them with an underscore or something equally distinctive?

Cheers,
-- 
Cameron Simpson <cs at zip.com.au> DoD#743
http://www.cskk.ezoshosting.com/cs/

Although dead and in cryonic suspension, Herb Asher was having his own
problems.  Very close to the Cry-Labs, Incorporated, warehouse a
fifty-thousand-watt FM transmitter had been located the year before.
For reasons unknown to anyone the cryonic equipment had begun picking
up the powerful nearby FM signal.  Thus Herb Asher, as well as everyone
in suspension at Cry-Labs, had to listen to elevator music all day and
all night, the station being what it liked to call a "pleasing sounds"
outfit.  Right now an all-string version of tunes from _Fiddler on the
Roof_ assailed the dead at Cry-Labs . . .
        - Philip K. Dick, `The Divine Invasion'




More information about the fedora-list mailing list