[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: ls doesn't work in if statements in bash 4.3
From: |
Eduardo A . Bustamante López |
Subject: |
Re: ls doesn't work in if statements in bash 4.3 |
Date: |
Wed, 26 Mar 2014 21:01:25 -0700 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
This is a "user" problem. You are using the wrong features for the
task, your code should read:
| for f in *; do ./test "$f"; done
and quote all other variable expansions.
NEVER do: for foo in `...` OR for foo in $(...(
This is wrong, because you're relying on word splitting and glob
expansion, which is wrong 99% of the cases.
Read:
- http://mywiki.wooledge.org/WordSplitting
- http://mywiki.wooledge.org/Quotes
It is totally not a bash bug (read the manual, it's documented).
On Wed, Mar 26, 2014 at 05:30:12PM -0700, address@hidden wrote:
> 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
>
>
>
--
Eduardo Alan Bustamante López
- ls doesn't work in if statements in bash 4.3, billycongo, 2014/03/26
- Re: ls doesn't work in if statements in bash 4.3, billycongo, 2014/03/26
- Re: ls doesn't work in if statements in bash 4.3,
Eduardo A . Bustamante López <=
- Re: ls doesn't work in if statements in bash 4.3, billycongo, 2014/03/27
- Re: ls doesn't work in if statements in bash 4.3, Greg Wooledge, 2014/03/27
- easier construction of arrays, Mike Frysinger, 2014/03/27
- Re: easier construction of arrays, Pierre Gaston, 2014/03/27
- Re: easier construction of arrays, Dan Douglas, 2014/03/27
- Re: easier construction of arrays, Mike Frysinger, 2014/03/27
- Re: easier construction of arrays, Dan Douglas, 2014/03/27
Re: ls doesn't work in if statements in bash 4.3, billycongo, 2014/03/27
Re: ls doesn't work in if statements in bash 4.3, billycongo, 2014/03/27