start page | rating of books | rating of authors | reviews | copyrights

Unix Power ToolsUnix Power ToolsSearch this book

37.4. Stop Syntax Errors in String Tests

Using the test or [ (square bracket) command (Section 35.26) for a string test can cause errors if the variable starts with a dash (-). For example:

if [ "$var" = something ]
then ...

If $var starts with -r, the test command may think that you want to test for a readable file.

One common fix (that doesn't always work; see below) is to put an extra character at the start of each side of the test. This means the first argument will never start with a dash; it won't look like an option:

if [ "X$var" = Xsomething ]
then ...

That trick doesn't work if you want the test to fail when the variable is empty or not set. Here's a Bourne shell test that handles empty variables:

case "${var+X}" in
X) ...do this if variable is set...
   ;;

*) ...do this if variable is not set...
   ;;
esac

If $var is set (even if it has an empty string), the shell replaces ${var+X} (Section 36.7) with just X and the first part of the case succeeds. Otherwise the default case, *), is used.

See also Section 37.3 for a brief example of bash parameter expansion and dealing with unset or null values by reporting an error or by assigning default values.

-- JP



Library Navigation Links

Copyright © 2003 O'Reilly & Associates. All rights reserved.