repo
Команда не може піклуватися , які цитати він отримує. Якщо вам потрібно розширення параметрів, використовуйте подвійні лапки. Якщо це означає, що вам доведеться перенести нахил великої кількості речей, використовуйте одинарні лапки для більшої частини, а потім вирвіться з них і перейдіть до парних частин на ту частину, де вам потрібно розширення.
repo forall -c 'literal stuff goes here; '"stuff with $parameters here"' more literal stuff'
Пояснення випливає, якщо вас цікавить.
Коли ви запускаєте команду з оболонки, ця команда отримує як аргументи - це масив з нульових завершених рядків. Ці рядки можуть містити абсолютно будь - який ненульовий символ.
Але коли оболонка будує цей масив рядків з командного рядка, вона спеціально інтерпретує деякі символи; це розроблено для полегшення (дійсно можливого) набору команд. Наприклад, пробіли зазвичай вказують межу між рядками в масиві; з цієї причини окремі аргументи іноді називають "словами". Але аргумент, тим не менш, може мати пробіли; вам просто потрібен якийсь спосіб сказати оболонці, що ви хочете.
Ви можете використовувати зворотну косу рису на очах перед будь-яким символом (включаючи пробіл чи інший нахил), щоб сказати оболонці буквально обробляти цей символ. Але поки ви можете зробити щось подібне:
echo \"Thank\ you.\ \ That\'ll\ be\ \$4.96,\ please,\"\ said\ the\ cashier
... це може стати стомлюючим. Тож оболонка пропонує альтернативу: лапки. Вони бувають двох основних різновидів.
Подвійні лапки називають "групуванням лапок". Вони запобігають розширенню марок та псевдонімів, але в основному вони містять пробіли в слові. Інші речі, такі як розширення параметрів і команд (такі речі, про які сигналізує a $
), все ще трапляються. І звичайно, якщо ви хочете буквальну подвійну цитату всередині подвійних лапок, ви повинні змінити її на наступний:
echo "\"Thank you. That'll be \$4.96, please,\" said the cashier"
Одиночні лапки більш драконічні. Все між ними сприймається абсолютно буквально, включаючи зворотні риски. Немає абсолютно ніякого способу отримати буквальну єдину цитату всередині окремих цитат.
На щастя, лапки в оболонці - це не розділювачі слова ; самі по собі вони не закінчують слова. Ви можете входити і виходити з лапок, у тому числі між цитатами різних типів, в межах одного слова, щоб отримати бажаний результат:
echo '"Thank you. That'\''ll be $4.96, please," said the cashier'
Так що простіше - набагато менше косої коси, хоча послідовність закритих одиничних котирувань, зворотна косоокість, буквальна одинарна цитата та відкрита одноцитата вимагає звикання.
Сучасні оболонки додали ще один стиль котирування, не визначений стандартом POSIX, у якому провідна лапка означена префіксом знака долара. Цитовані рядки дотримуються подібних умов до літеральних рядків у мові програмування ANSI C, тому їх іноді називають "рядками ANSI" та $'
... '
пара "цитатами ANSI". У межах таких рядків вищезазначені поради щодо того, як знімати косоокі риси буквально більше не застосовуються. Натомість вони знову стають спеціальними - не тільки ви можете включити буквальний єдиний лапок або зворотній косою рисою, попередньо додавши до нього зворотний косу рису, але також оболонка також розширює втечу символу ANSI C (наприклад, \n
для нового рядка, \t
для вкладки та \xHH
для символу з шістнадцятковий кодHH
). В іншому випадку вони поводяться як рядки з одним котируванням: жодна заміна параметрів чи команд не відбувається:
echo $'"Thank you. That\'ll be $4.96, please," said the cashier'
Важливо зазначити, що окрема рядок, отримана як аргумент echo
команди, точно така ж у всіх цих прикладах. Після того як оболонка буде проаналізована командним рядком, немає ніякої можливості для запущеної команди сказати, що було зазначено як. Навіть якби хотів.
repo forall -c ' ...before... '"$variable"' ...after...'