simple (and stupid) shell scripting question

Nerius Landys nlandys at
Mon Feb 15 20:16:02 UTC 2010

>> #!/bin/sh
>> DIRNAME="`dirname \"$0\"`"
>> cd "$DIRNAME"
>> SCRIPTDIR="`pwd`"
>> What if I got rid of extra double quotes?  Like this:
>> DIRNAME=`dirname \"$0\"`
>> cd "$DIRNAME"
>> SCRIPTDIR=`pwd`
> That is perfectly fine.  Word-splitting and filename expansion are
> not performed for variable assignments.  Also immune is the expression
> after "case", so this is always fine:
>  case $FOO in ...

Since you guys have been so helpful I thought I'd ask one more question.

Let's say I have a script named "te st" (yes, with a space in the filename).
The contents of this script are:

if [ $# -ne 2 ]; then
    echo 1>&2 "One argument expected.  Example usage:"
    echo 1>&2 "  `basename \"${0}\"` cheaters"
    exit 1

When executed with no arguments, this script would print something like so:

nlandys at daffy<zsh># ./te\ st
One argument expected.  Example usage:
  te st cheaters
nlandys at daffy<zsh>#

Is there a function, or command line utility, to "escape" a string,
making it suitable to be input on the command line?  For example, this
"escape" utility would take a input of "te st" and create an output of
"te\ st".  Other things such as quotes and single quotes would be
handled as well.

More information about the freebsd-questions mailing list