Re: Question re: braces and quotes
- From: Barry Margolin <barmar@xxxxxxxxxxxx>
- Date: Mon, 30 Oct 2006 07:47:22 -0500
In article <Z6m1h.6506$Wy6.4104@trnddc01>,
"Peter" <peter@xxxxxxxxxxxxx> wrote:
I was reviewing the Suse/Gentoo run-crons script, and comparing it with
some elementary scripts I had written. All of a sudden, I realized that
despite reading the docs and advanced scripting manual, I really did not
have a good grasp on the concept of when to quote, enclose in a brace, etc.
This snippet crystallizes my confusion. As written, the variable
definition for LOCKFILE uses braces, but I found that it made no
difference whether or not I used braces, quotes, or any combination. I
understand that certain test contructs, such as [ -n... ] require quotes,
and if I want to manipulate a variable, braces are useful for
substitution, but could someone please explain if the first assignment of
LOCKFILE is proper, and why? For that matter, when would the assignment to
LOCKDIR have to be quoted? If there is a whitespace?
Thanks a lot!
#!/bin/sh
LOCKDIR=/var/spool/cron/lastrun
LOCKFILE=${LOCKDIR}/lock
echo "braces no quotes $LOCKFILE"
LOCKFILE="${LOCKDIR}"/lock
echo "braces quote $LOCKFILE"
LOCKFILE=$LOCKDIR/lock
echo "no braces no quote $LOCKFILE"
LOCKFILE="$LOCKDIR"/lock
echo "no braces quote $LOCKFILE"
None of the above examples need the braces or quotes. But here are some
examples where they're necessary:
LOCKFILE=${LOCKDIR}1/lock
Without the braces, it would look for a variable named LOCKDIR1.
LOCKFILE="$LOCKDIR/lock file with spaces"
Without the quotes, it would set the environment variable to
$LOCKDIR/lock while trying to execute the command line "file with
spaces".
STRINGWITHSPACES="foo bar"
echo $STRINGWITHSPACES
echo "$STRINGWITHSPACES"
The first one loses the multiple spaces between the words.
However, you don't need it here:
OTHERSTRING=$STRINGWITHSPACES
because word splitting of the assignment portion of a command is done
before variable expansion.
--
Barry Margolin, barmar@xxxxxxxxxxxx
Arlington, MA
*** PLEASE post questions in newsgroups, not directly to me ***
*** PLEASE don't copy me on replies, I'll read them in the group ***
.
- Follow-Ups:
- Re: Question re: braces and quotes
- From: Peter
- Re: Question re: braces and quotes
- References:
- Question re: braces and quotes
- From: Peter
- Question re: braces and quotes
- Prev by Date: Question re: braces and quotes
- Next by Date: Re: Question re: braces and quotes
- Previous by thread: Question re: braces and quotes
- Next by thread: Re: Question re: braces and quotes
- Index(es):
Relevant Pages
|