É provavelmente vale a pena mencionar que o UNIXy / conchas posixy como shell Bourne, bash, ksh, zsh, etc fazer expansão curinga (de caracteres glob como *
, ?
, [range]
, [!range]
e outras expansões como chaves e globs estendidos) para compilar uma lista de argumentos antes de o comando É executado. Portanto, essa expansão é feita pelo shell e não pelo comando ao qual esses argumentos podem ser discutidos.
ou seja, o shell é responsável pelo quê *
, *.*
expande para
$ ls
file.csv file.doc file.pdf file.txt file.xlsx zz-file-without-extension
$ (set -xv; foo *) # is actually expanded to the following
+ foo file.csv file.doc file.pdf file.txt file.xlsx zz-file-without-extension
$ (set -xv; foo *.*) # note this does not match `zz-file-without-extension`
+ foo file.csv file.doc file.pdf file.txt file.xlsx
Esse não é o caso no CMD (e da mesma forma para os utilitários do PowerShell ), pois ele passa os caracteres glob literalmente para o comando executado - e, portanto, a expansão é de responsabilidade do comando / utilitário e não do shell. Então, em última análise, o que *.*
ou o *
meio é deixado para o utilitário, deixando-o em conformidade (ou não) com as convenções - e é por isso que os utilitários do CMD dir *.*
também combinam (sem dúvida incorretamente, mas preservam as expectativas) os arquivos sem extensões.
Eu acredito que é seguro resumir dessa maneira.
- Sob o CMD, isso depende do utilitário.
- No PowerShell, os utilitários que fazem uso da classe WildCardPattern fornecerão um subconjunto consistente de comportamentos posixy.
*
e*.*
agora são equivalentes paracmd
comandos internos e utilitários de linha de comando modernos, alguns utilitários mais velhos que usam parâmetros de máscara de arquivo podem usar as funções correspondentes arquivo mais velhos, e para eles as máscaras não será equivalente.