I tested on bash 4.3 and 3.0
testing]$ bash --version
bash --version
GNU bash, version 4.3.0(1)-release (x86_64-unknown-linux-gnu)
In a directory I have:
testing]$ ls -l
total 16
-rw-r--r-- 1 hpierce hpierce 77 Mar 26 20:09 dog1
-rw-r--r-- 1 hpierce hpierce 77 Mar 26 20:09 dog2
-rw-r--r-- 1 hpierce hpierce 77 Mar 26 20:09 dog3
-rw-r--r-- 1 hpierce hpierce 0 Mar 26 20:07 dog4
-rwxr-xr-x 1 hpierce hpierce 80 Mar 26 20:02 test
dog1, dog2, and dog3 have content. dog4 is empty.
test is a simple script:
testing]$ cat test
#!/bin/bash
FILE=$1
echo $FILE
if [ ! -e $FILE ]
then
echo "Usage: $0 <file>"
exit 1
else
echo $FILE exists
fi
Here's a regular run:
testing]$ for f in *; do ./test $f; done
dog1
dog1 exists
dog2
dog2 exists
dog3
dog3 exists
dog4
dog4 exists
test
test exists
Now I add a ls:
testing]$ for f in `ls dog*`; do ./test $f; done
dog1
Usage: ./test <file>
dog2
Usage: ./test <file>
dog3
Usage: ./test <file>
dog4
Usage: ./test <file>
So I moved it to an earlier version of bash
testing]$ bash --version
bash --version
GNU bash, version 3.00.15(1)-release (x86_64-redhat-linux-gnu)
testing]$ for f in `ls dog*`; do ./test $f; done
dog1
dog1 exists
dog2
dog2 exists
dog3
dog3 exists
dog4
dog4 exists