-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Thursday, December  6 at 11:40 AM, quoth Paul Hoffman:
>> chmod a-w dir/new
>> if [ `find dir -type f` ] ; then
>
> You have to do something like this instead:
>
> found=`find dir -type f`
> if -n "$found" ; then
>
> At least on my system (Mac OS X 10.3 = Darwin 7.9.0), where find(1) 
> exits with status 0 even if nothing is found.

That's why I used the form that I used. Consider what I said; I said

     if [ `find dir -type f` ] ; then

I did not say:

     if find dir -type f ; then

The reason is because the former relies on the output of find, and the 
latter relies on the exit status of find. In other words, I had 
already addressed this issue. At worst, some shells might require that 
to be rewritten like this:

     if [ "$( find dir -type f )" ] ; then

The reason for that is that [ (also known as /bin/test, and frequently 
a builtin shell command) returns true if it has any arguments of any 
non-zero length, and returns false if it does not (i.e. the -n 
argument is the default behavior). My example is equivalent to this:

     found=`find dir -type f`
     if [ "$found" ] ; then

...but does not require the extraneous variable definition.

Your alternative suggestion:

     if -n "$found" ; then

will, unfortunately, not work in many situations because in many POSIX 
shells (including bash), "-n" is not a valid argument to the "if" 
keyword, nor is "-n" a recognized executable program or command. 
Perhaps in your system you have a /bin/-n program, but most folks 
don't.

~Kyle
- -- 
Many who claim to have been transformed by Christ's love are deeply, 
even murderously, intolerant of criticism.
                                                          -- Sam Harris
-----BEGIN PGP SIGNATURE-----
Comment: Thank you for using encryption!

iD8DBQFHWDXJBkIOoMqOI14RAj1CAJsETNaVb1dj9M9kNyvsy1tKjcHD2QCfRZVu
+DLO3JgxGFwm5u70aTy7BU4=
=Xgwv
-----END PGP SIGNATURE-----

Reply via email to