Ви, мабуть, знаєте про вилкову бомбу :
:(){ :|:&};: #WARNING: harmful code
Цікаво, чому потрібно для її розбору включити пробіл після відкриття фігурної дужки.
Ви, мабуть, знаєте про вилкову бомбу :
:(){ :|:&};: #WARNING: harmful code
Цікаво, чому потрібно для її розбору включити пробіл після відкриття фігурної дужки.
Відповіді:
{}
{ list; }Розміщення списку команд між фігурними дужками призводить до того, що список виконується в поточному контексті оболонки. Не створено підкашлю. Наступний список з комою (або новим рядком) обов'язковий.
Окрім створення нижньої оболонки, існує двозначна різниця між цими двома конструкціями через історичні причини. Дужки є зарезервованими словами, тому вони повинні бути відокремлені від списку пробілами або іншими метахарактерами оболонок. Дужки є операторами і оболонкою розпізнаються як окремі лексеми, навіть якщо вони не відокремлені від списку пробілом.
// джерело
Я думаю, що @rush може дати правильну, якщо оманливу відповідь тут. Вилка-бомба визначає функцію, яка називається " :". Код у фігурних дужках не виконується, поки функція не буде викликана остаточним " :". Отже фігурні дужки як групування команд і фігурні дужки як тіло функції синтаксично однакові, але мають різну семантику.
З того самого документа , що цитує @rush:
Зауважте, що з історичних причин фігури, що оточують тіло функції, в найпоширенішому використанні мають бути відокремлені від тіла пробілами чи новими рядками. Це відбувається тому, що дужки є зарезервованими словами і розпізнаються як такі лише тоді, коли вони відокремлені від списку команд пробілом або іншим метахарактером оболонки. Також при використанні дужок список повинен бути закінчений крапкою з комою, знаком "&" або новим рядком.
function_bodyє compound_command(плюс необов’язково redirect_list). Простір потрібен тому {, що це зарезервоване слово, а не особливий символ.
brace_groupповодимося по-різному, коли частина функції, а коли ні. Я використовував групування команд, щоб описати останній випадок, і саме це було описано у посиланні на пік.
{це не оператор, а застережене слово, і слова потрібно відокремлювати від інших слів, щоб вважати їх чіткими.