Probablemente vale la pena mencionar que el unixy / conchas posixy como bourne shell, bash, ksh, zsh, etc. hacen expansión de comodines (de caracteres glob como *
, ?
, [range]
, [!range]
y otras expansiones como llaves y globos largos) para compilar una lista de argumentos antes de la orden es ejecutado. Entonces, esta expansión la realiza el shell, no el comando para el cual estos pueden ser argumentos.
es decir, el shell es responsable de qué *
, se *.*
expande a
$ 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
Este no es el caso en CMD (y de manera similar para las utilidades de PowerShell ) ya que pasa los caracteres glob textualmente al comando ejecutado, por lo que la expansión es responsabilidad del comando / utilidad y no del shell. Entonces, en última instancia, qué *.*
o qué *
medios le queda a la utilidad dejándola conforme (o no) a las convenciones, razón por la cual las utilidades de CMD dir *.*
también coinciden (posiblemente incorrectamente pero conservando las expectativas) archivos sin extensiones.
Creo que es seguro resumir de esta manera.
- Bajo CMD depende de la utilidad.
- Bajo PowerShell, las utilidades que hacen uso de la clase WildCardPattern proporcionarán un subconjunto consistente de comportamientos posixy.
*
y*.*
ahora son equivalentes acmd
los comandos internos y modernas utilidades de línea de comandos, algunas utilidades de más edad que tienen parámetros de máscara de archivo pueden utilizar las funciones de comparación de archivos de más edad, y para ellos las máscaras no serán equivalentes.