“ls” с одноразрядным шаблоном дает мне странные результаты

Я запускаю Ubuntu как VM в VMware Fusion на MacPro:

ayakovlev@ubuntu:~$ uname -a
Linux ubuntu 3.11.10.3 #1 SMP Thu Mar 6 15:31:54 EST 2014 x86_64 x86_64 x86_64 GNU/Linux

Команда ниже производит результат, который я ожидаю:

ayakovlev@ubuntu:~$ ls /usr/include/*5*
ax25.h

Когда я заменяю 5 6 Я получаю очень странные результаты:

ayakovlev@ubuntu:~$ ls /usr/include/*6*
a.out.h  asm  bits  c++  fpu_control.h  gnu  ieee754.h  sys  zconf.h

Какова могла бы быть причина этого?

3
задан 24 March 2014 в 05:51

2 ответа

Как @Sparhawk объясненный, то, что происходит, - то, что Вы перечисляете содержание каталогов. Это не будет зависеть от *, отклоняют Вас, используют, насколько я знаю, это - поведение по умолчанию GNU ls. Реализации неGNU могут отличаться, но я сомневаюсь относительно этого.

Когда Вы выполняете эту команду:

ls /usr/include/*6*

Шарик (*6*) расширен Вашей оболочкой (удар, например) перед вызовом ls. Так, учитывая следующую структуру каталогов:

.
├── dir1
│  ├── file1
│  └── file2
└── dir2
    ├── file1
    └── file2

ls d* будет расширен до ls dir1 dir2, и дайте результаты, которые Вы ожидаете:

dir1:
file1  file2

dir2:
file1  file2

Это то, как ls соглашения с несколькими целевыми каталогами по умолчанию, это перечисляет каждый найденный каталог и затем содержание того каталога. Однако при выполнении его на единственном каталоге имя не печатается:

$ ls d*1
file1  file2

Так, с тех пор существует только одно соответствие для шарика *6* в /usr/include и то соответствие является каталогом, Вы работаете ls с единственным каталогом, как введено и, поэтому, это перечисляет содержание каталога без включения имени каталога.

2
ответ дан 17 November 2019 в 19:24

Подстановочные знаки в ls /usr/include/*6* расширяются до любых соответствий. В первом случае это соответствовало определенным регулярным файлам. Однако, если это будет соответствовать каталогам такой как /usr/include/x86_64-linux-gnu, это распечатает содержание тех каталогов вместо этого (т.е. это расширилось бы до ls /usr/include/x86_64-linux-gnu).

можно проверить, что подстановочный знак расширился бы до каталога с ls /usr/include | grep 6.

6
ответ дан 17 November 2019 в 19:24

Другие вопросы по тегам:

Похожие вопросы: