*/**
corresponderá apenas aos diretórios (e seus subdiretórios e arquivos); ele não corresponderá aos arquivos (não-diretórios) no diretório atual, porque a parte */
dele requer um prefixo de diretório antes de iniciar a expansão **
globstar. Quanto ao **/*
, o /*
é estranho, já que o **
, por si só, se expandirá para todos os arquivos e diretórios no diretório atual (sujeito à opção dotglob
). Como cada diretório foi expandido nesse ponto, o /*
final não corresponde a nada.
Tenha cuidado ao usar ls
para testar, já que ele "ajudará" a ler em qualquer diretório que você possa passá-lo; considere, em vez disso, algo como:
printf "%s\n" */**
printf "%s\n" **/*
Observe também que a canalização para wc -l
poderia enganá-lo nas contagens reais; considere:
$ touch a $'b\nc'
$ ls -1
a
b?c
$ ls | wc -l
3 ## WRONG!