Странная грамматика в команде cat

Прежде всего, я прошу прощения, если на этот вопрос можно ответить с помощью веб-поиска, но я не смог ничего найти.

В команде cat есть грамматика, которая, как я видел, "повторяет" файлы.

cat file{,}

Эквивалентно вызову

cat file file

Также,

cat file{,}{,}{,}{,}

повторы file не четыре раза, а 16 раз. К тому же,

cat file{,,}

повторы file три раза.

Я хотел бы узнать больше об этой грамматике. Как это называется? Это встроено в кошку или это особенность оболочки? Есть ли еще особенности этой грамматики?

2 ответа

Решение

Эта функция называется расширением скобок.

Вообще можешь написать file{1,2,3} и Bash расширяет его до file1 file2 file3 перед запуском команды.

Если ты пишешь

mkdir foo{1,2,3}{a,b}

это будет эквивалентно

mkdir foo1a foo1b foo2a foo2b foo3a foo3b

и создаст эти 6 каталогов.

В твоем случае ({,}) вы ничего не добавляете и, следовательно, получаете одно и то же слово дважды.

Синтаксис, на который вы ссылаетесь, называется расширением скобок.

{,,} Синтаксис часто используется для повторения слов. Высказывание:

echo foo{,,}

будет производить

foo foo foo

Когда вы комбинируете расширения скобок, это эквивалентно вложению этих:

echo foo{,}{,}{,}

эквивалентно высказыванию

echo foo\ foo{,}{,}

и к

echo foo\ foo\ foo\ foo{,}

и производит

foo foo foo foo foo foo foo foo

По сути, n пар {,} после того, как данная строка будет генерировать строку 2 раза.

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

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