`echo test?` печатает `test2`, но` ls test? 'ничего не печатает

Недавно я играл с bash, и я заметил следующее:

Сначала сделайте 2 dirs:

  • Как я могу перечислить все файлы и символические ссылки в компактном представлении?
  • Как избежать бесполезного использования кошки при анализе файла?
  • Как я могу передать только stderr в zsh?
  • перечисление файлов с шаблоном с началом и окончанием
  • Как выводить строки, разделенные запятыми, используя расширение brah brace
  • Как перечислить символические ссылки с sftp?
  • $ mkdir test $ mkdir test2 

    Затем:

     $ echo test? 

    Выходы (правильно):

     test2 

    Но:

     $ ls test? 

    Не выводит ничего …

    Но, если вы создадите еще один каталог (test3), echo и ls работают так, как предполагалось.

    Кто-нибудь знает, почему это происходит?

  • Список только обычных файлов (но не каталогов) в текущем каталоге
  • Как выводить только имена файлов (с пробелами) в ls -Al?
  • Прикрепите к существующему сеансу экрана, но в новом окне
  • Два файла в одной папке с тем же именем - нужно удалить один, но не оба
  • Есть ли способ читать строки из вывода команды?
  • Что означает этот синтаксис "$ {i% .avi} .mp4"
  • One Solution collect form web for “`echo test?` печатает `test2`, но` ls test? 'ничего не печатает”

    Давайте попробуем и поймем из основного.

     mkdir test touch file mkdir test1 mkdir test2 

    ? ищет один и только один символ.

    Теперь, когда мы выдаем команду ls tes? выход будет, file .

    Это сработало, потому что мы создали файл внутри каталога. Из man-страницы ls ,

     NAME ls - list directory contents 

    Тест каталога содержит file внутри, поэтому команда ls фактически перечисляет файлы, которые находятся внутри каталога.

    Теперь давайте создадим файл, как показано ниже.

     touch ramesh ls rames? ramesh 

    Причина, по которой эта команда работала, заключается в том, что ramesh является файлом, и он присутствует в текущем каталоге (в соответствии с работой ls он перечисляет содержимое каталога, а в текущем каталоге на самом деле есть файл с именем ramesh ).

    Теперь давайте создадим каталог с именем ram1 как ram1 ниже.

     mkdir ram1 ls ram? 

    Вышеизложенное ничего не дает. Это связано с тем, что в каталоге ram1 нет файлов внутри него. Теперь, если мы создаем другой каталог с именем ram2 и try, он работает, потому что он сначала проверяет, есть ли в каталоге ram1 какие-либо файлы, а затем проверяет, есть ли в ram2 какие-либо файлы. Помните, что работает над сортировкой.

    Если вы хотите больше узнать о внутренней работе, выполните команду stat .

    В этом случае stat ram? будет производить выход как,

      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 
    Linux и Unix - лучшая ОС в мире.