Using the
test
or
[
(square bracket) command (
44.20
)
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" = X
something
]
then ...
That trick doesn't work if you want the test to fail when the variable is empty
or not set.
Here's a 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}
(
45.12
)
with just
X
and the first part of the
case
succeeds.
Otherwise the default case,
*)
, is used.