Я усвідомлюю, що це !
має особливе значення для командного рядка в контексті історії командного рядка, але окрім цього, у сценарії рунінгу знак оклику іноді може викликати помилку розбору.
Я думаю, що це щось стосується event
, але я не маю уявлення, що це за подія чи що вона робить. Незважаючи на це, одна і та ж команда може поводитися по-різному в різних ситуаціях.
Останній приклад, наведений нижче, викликає помилку; але чому, коли той самий код працював поза заміною команди? .. з використанням GNU bash 4.1.5
# This works, with or without a space between ! and p
{ echo -e "foo\nbar" | sed -nre '/foo/! p'
echo -e "foo\nbar" | sed -nre '/foo/!p'; }
# bar
# bar
# This works, works when there is a space between ! and p
var="$(echo -e "foo\nbar" | sed -nre '/foo/! p')"; echo "$var"
# bar
# This causes an ERROR, with NO space between ! and p
var="$(echo -e "foo\nbar" | sed -nre '/foo/!p')"; echo "$var"
# bash: !p': event not found
protected
був би доречнішим. (захищено "єдиними цитатами")
var=$(…)
(без подвійних лапок), і це буде працювати так, як (я думаю). Це по - , як і раніше «безпечно» , оскільки значення частина присвоєння простого не підлягає слово розщеплення або підстановка (хоча це не може бути правдою завдань , зроблених з допомогою вбудованих команд (наприклад export
, local
і т.д.) при всіх оболонках). На жаль, це не виходить за рамки простих призначень, оскільки подвійні лапки є способом захисту від розбиття слів і глобалізації, в той же час отримуючи інші види розширення в інших контекстах.