On Sun, Aug 5, 2018 at 12:20 AM Jonathan Nieder <[email protected]> wrote:
> William Chargin wrote:
> > test_dir_is_empty () {
> > test_path_is_dir "$1" &&
> > - if test -n "$(ls -a1 "$1" | egrep -v '^\.\.?$')"
> > + if test "$(ls -A1 "$1" | wc -c)" != 0
>
> Another portability gotcha: wc output includes a space on Mac so this
> test would always return true there. How about
>
> if test -n "$(ls -A1 "$1")"
>
> "ls -A" was added in POSIX.1-2017. [...]
> That's very recent, but the widespread implementation it mentions is
> less so. This would be our first use of "ls -A", so I'd be interested
> to hear from people on more obscure platforms. It does seem to be
> widespread.
A simpler approach, without the portability concerns of -A, would be
to remove the "." and ".." lines from the top of the listing:
ls -f1 "$1" | sed '1,2d'
If we're worried about -f not being sufficiently portable, then an
even simpler approach would be to check whether the output of 'ls -a1'
has more lines than the two expected ("." and ".."):
test $(ls -a1 "$1" | wc -l) -gt 2
I think I favor this final implementation over the others.