Доповнити існуючі корисні відповіді; наконечник капелюха до QZ Підтримка за те, щоб заохотити мене опублікувати окрему відповідь:
Тут грають два чіткі механізми :
(А) є чи cut сам по собі вимагає роздільник (простору, в даному випадку) передається -dможливості бути окремим аргументом або чи є це прийнятно , щоб додати його безпосередньо до -d.
(b) як оболонка зазвичай аналізує аргументи, перш ніж передавати їх команді, що викликається.
(а) відповідає цитатою з керівних принципів POSIX щодо комунальних послуг (моє значення)
Якщо SYNOPSIS стандартної утиліти показує параметр із обов'язковим параметром-аргументом [...], відповідна програма використовує окремі аргументи для цього параметра та його аргумент-опціону . Однак відповідна реалізація також повинна дозволяти програмам вказувати параметр та параметр-аргумент у тому ж рядку аргументу без втручання символів .
Іншими словами: у цьому випадку, оскільки -dпараметр-аргумент опції є обов'язковим , ви можете вибрати, чи слід вказати роздільник як :
- (s) ВСІ: окремий аргумент
- (d) АБО: як значення, безпосередньо прикріплене до
-d .
Після того як ви вибрали (-ла) або (г), важливий наступний рядковий-обчислювальний аналіз оболонки - (b) -
Еквівалентність пояснюється обробкою рядково-буквальної обробки оболонки :
Усі рішення, наведені вище, призводять до того самого рядка (у кожній групі) до моменту cutїх бачення :
(s) : cutбачить -d, як власний аргумент, а потім окремий аргумент, який містить пробіл - без лапок чи \префіксів !.
(d) : cutбачить -d плюс пробіл - без лапок і \префіксів! - як частина того ж аргументу.
Причина форм у відповідних групах в кінцевому рахунку однакова, двояка, заснована на тому, як оболонка аналізує рядкові букви :
- Оболонка дозволяє визначати буквальне як через механізм, який називається цитуванням , який може приймати кілька форм :
- одноцитувані рядки: вміст всередині
'...'сприймається буквально і утворює єдиний аргумент
- подвійне цитування рядків: вміст всередині
"..."також утворює єдиний аргумент, але підлягає інтерполяції (розширює змінні посилання, такі як $varпідстановки команд ( $(...)або `...`) або арифметичні розширення ( $(( ... ))).
\-цитування окремих персонажів : \попередній один символ спричиняє інтерпретацію цього символу як буквальний.
- Цитування доповнюється видаленням цитатою , а це значить , що після того , як оболонка розбирається в командному рядку, він видаляє ті лапки з аргументів (огороджувальних
'...'або "..."або \примірників) - таким чином, команда викликається істота ніколи не бачить лапки .