On Sun, Aug 5, 2018 at 12:20 AM Jonathan Nieder <jrnieder@xxxxxxxxx> 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.