Странная грамматика в команде 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 раза.
В дополнение к ссылке, указанной выше, вы также можете узнать о расширении скобок здесь.