В чем разница между ls [13] и ls {1,3}?

Я создал три файла в своем каталоге с помощью команды touch inv {1..3} .txt . Теперь я использовал две команды, и их результат практически не изменился. Эти две команды: ls inv [13] .txt и ls {1,3} .txt .

Так чем же эти два разные? Чем квадратные скобки отличаются от фигурных скобок? Также я искал в Google "linux [..]", но ничего не нашел, так могу ли я узнать, как эти вещи называются в терминологии Linux?

Спасибо

11
задан 2 September 2016 в 17:48

2 ответа

  • {} назван расширением фигурной скобки. Это имеет две формы: {x..y} и {x,y}, замена x и y с любым алфавитным или числовым значением.

    В первой форме, {x..y} будет расширен до всех значений от x кому: y, включительно. Например, {2..5} будет расширен до 2, 3, 4, 5.

    Во второй явной форме, {x,y} будет расширен до только x, y. Например, {2,5} будет расширен до 2 и 5.

    Если никакое расширение не возможно, шаблон рассматривают буквально, например, в {a..3}.

    Важная вещь отметить состоит в том, что расширение фигурной скобки будет сделано (если возможный) независимо от любого соответствия файла, в то время как в создании/соответствии файла.

  • [] известен как расширение пути (или globbing) шаблон. В отличие от расширения фигурной скобки можно только использовать его при соответствии именам файлов, это будут рассматривать буквально при использовании его при создании файлов.

    Это имеет две формы: [xyz...] и [x-y].

    В первой форме это будет соответствовать любому отдельному символу в квадратных скобках отдельно, Т.е. каждый символ рассматривают индивидуально. Таким образом для [25].txt это будет соответствовать названному файлу 2.txt или 5.txt в текущем каталоге, в то время как для [245].txt это будет соответствовать любому названному файлу 2.txt или 4.txt или 5.txt.

    Во второй форме расширение диапазона сделано сначала прежде, чем соответствовать индивидуально, если это возможно, иначе рассматриваемый буквально. Таким образом для [2-5]. txt, это будет соответствовать любому названному файлу 2.txt или 3.txt или 4.txt или 5.txt. Если диапазон не может быть расширен, он будет, рассматривал буквально, например, в случае [a-3].txt.


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

$ ls {1..4}.txt
ls: cannot access 4.txt: No such file or directory
1.txt  2.txt  3.txt

$ ls [1-4].txt
1.txt  2.txt  3.txt

Примечание мобильности:

[] оператор расширения пути определяется POSIX, следовательно портативным среди Оболочки Bourne и производных.

Расширение фигурной скобки, {}, не определяется POSIX, следовательно не является портативным среди всех оболочек. Например, dash (sh в Ubuntu), не имеет этого. Это было одолжено от csh и будет работать над определенными оболочками только, например. bash, zsh, ksh93, fish. Удостоверьтесь оболочка, которую Вы используете, поддерживает это перед реализацией.


Пример:

$ touch {1..3}.txt

$ ls {1..3}.txt
1.txt  2.txt  3.txt

$ ls {1,2,3}.txt
1.txt  2.txt  3.txt

$ ls {1..4}.txt
ls: cannot access 4.txt: No such file or directory
1.txt  2.txt  3.txt

$ ls {a..3}.txt
ls: cannot access {a..3}.txt: No such file or directory

$ ls [123].txt
1.txt  2.txt  3.txt

$ ls [1-3].txt
1.txt  2.txt  3.txt

$ ls [1-4].txt
1.txt  2.txt  3.txt

$ ls [a-3].txt
ls: cannot access [a-3].txt: No such file or directory
14
ответ дан 23 November 2019 в 03:56

Основное отличие между двумя формами проиллюстрировано здесь:

$ ls inv[15].txt
inv1.txt
$ ls inv{1,5}.txt
ls: cannot access 'inv5.txt': No such file or directory
inv1.txt

inv[15].txt шарик и развернет список соответствия файлам в Вашей файловой системе. Это - расширение пути.

inv{1,5}.txt расширяется до inv1.txt и inv5.txt независимо от того, какие файлы находятся на самом деле в Вашей файловой системе. Это - расширение фигурной скобки.

7
ответ дан 23 November 2019 в 03:56

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

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