[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: test -f with no args is true
From: |
Bob Proulx |
Subject: |
Re: test -f with no args is true |
Date: |
Sat, 15 Apr 2006 16:05:43 -0600 |
User-agent: |
Mutt/1.5.9i |
Charlie Bennett wrote:
> Hmmmm. I sat on that blasted committee.
:-)
> I'll file a corrigendum or whatever it's called. This should at
> least be called out in the rationale.
>
> No biggie. I'll just make sure I quote all of my args.
Yes, because test and [ were external commands when the API solidified
they must continue to behave the same even though they are built-in
now or they would break legacy scripts. So quoting is the way to go.
if [ -f $filename ]; then # possible arg problems here
If [ is an external command and $filename is not set then it would not
appear to the external test command. Of course it is internal now but
must still behave the same. For robustness that should be:
if [ -f "$filename" ]; then
As an alternative, you could use the [[ ... ]] syntax. That is the
newer syntax, covered in POSIX too so should be portable to POSIX
systems, but is always a built-in to the shell. This avoids need to
quote the variables. This is okay even if $filename is not set.
if [[ -f $filename ]]; then
Because it is a built-in the $filename won't be expanded to a null
argument. However it is not portable to systems with a /bin/sh that
is a Bourne shell since the Bourne shell does not support that syntax.
I still use the [ ... ] form with quoting mostly for that reason. But
[[ ... ]] does have its attractions and advocates. I am even starting
to use it casually now. :-)
Bob
Re: test -f with no args is true, Paul Jarc, 2006/04/15