Quoting


Table of Contents

braces and quotes 
:quote in eval 
NOK 
OK 
:quote execution result 
no quote 
quote 
quote within $() 
quote within $() 
cmd:eval, substitution of varible value 
' in bash alias 
' in bash alias 
cmd:sqt/sdq string quote & dequote 
quoting question 
X"$Y" vs. "X$Y" in /bin/sh 
X"$Y" vs. "X$Y" in /bin/sh 

braces and quotes 

Newsgroups:  comp.unix.shell
Date:        Mon, 30 Oct 2006 07:47:22 -0500
> 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. ... For that matter, when would
> the assignment to LOCKDIR have to be quoted? If there is a whitespace?
>
> 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