`echo test?` imprime `test2` pero` ls test? `imprime nada

Estuve jugando recientemente con flashing bash y noté lo siguiente:

Primero, crea 2 dirs:

$ mkdir test $ mkdir test2 

Entonces:

 $ echo test? 

Salidas (correctamente):

 test2 

Pero:

 $ ls test? 

No produce nada …

Pero, si crea un directory más (test3), echo y ls funcionan como se supone.

¿Alguien tiene alguna idea de por qué sucede esto?

Permítanos tratar de entender desde lo básico.

 mkdir test touch file mkdir test1 mkdir test2 

El ? busca uno, y solo uno, personaje.

Ahora, cuando emitimos el command ls tes? la salida sería, file .

Funcionó porque creamos un file dentro del directory. Desde la página de manual de ls ,

 NAME ls - list directory contents 

La test directory tiene el file dentro y, por lo tanto, el command ls realmente enumera los files que están presentes dentro del directory.

Ahora, vamos a crear un file como a continuación.

 touch ramesh ls rames? ramesh 

La razón por la cual el command anterior funcionó es porque ramesh es un file y está presente en el directory actual (Según el ls trabajando, enumera los contenidos del directory y en el directory actual hay un file llamado ramesh ).

Ahora, ram1 un directory llamado ram1 como a continuación.

 mkdir ram1 ls ram? 

Lo anterior no produce nada. Es porque el directory ram1 actualmente no tiene files dentro. Ahora, si creamos otro directory llamado ram2 y lo intentamos, funciona porque primero comtesting si el directory ram1 tiene algún file y luego verifica si el directory ram2 tiene algún file. Recuerde que ls funciona en la sorting.

Si desea ver más sobre el funcionamiento interno, emita el command stat .

En este caso, stat ram? produciría la salida como,

  File: `ram1' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 805h/2053d Inode: 6743976 Links: 2 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2014-06-30 18:17:06.000000000 -0500 Modify: 2014-06-30 18:17:03.000000000 -0500 Change: 2014-06-30 18:17:03.000000000 -0500