В ударе, как я выхожу из восклицательного знака?

Я хочу сделать что-то как bzr commit -m "It works!". Я могу отсортировать Escape восклицательный знак путем выполнения bzr commit -m "It works\!". Однако затем мое сообщение о фиксации включает обратную косую черту. Как я выхожу из восклицательного знака, все еще игнорируя обратную косую черту?

184
задан 28.06.2012, 11:36

3 ответа

Так как Вы не зависите от удара для расширения переменных в сообщении о фиксации, Вы могли использовать одинарные кавычки вместо этого. Строки в одинарных кавычках не расширены ударом.

bzr commit -m 'This does work!' 
154
ответ дан 07.12.2019, 07:41

Выключите расширение истории:

set +H

или

set +o histexpand

Можно добавить одну из тех команд к Вашему ~/.bashrc если Вы обычно не используете расширение истории.

Bash 4.3 добавил особый случай:

символ расширения истории также рассматривают, как заключено в кавычки, если он сразу предшествует заключительной двойной кавычке в дважды заключенной в кавычки строке

66
ответ дан 07.12.2019, 07:41

Используйте одинарные кавычки (') вместо двойных кавычек ("). Одинарные кавычки выключают всю интерпретацию материала в них, в то время как двойные кавычки только выключают некоторых.

bzr commit -m 'It works!'
12
ответ дан 07.12.2019, 07:41

Вот еще один метод, если вам нужны двойные кавычки, а также восклицание:

echo "It's broken"'!'

Это работает, даже если ! не находится в конце строки.

Например:

echo "hello there"'!'" and goodbye"

Бонус: Подобный метод может быть использован, чтобы избежать любого текста в Sh или Bash (с помощью sed): смотрите первый вариант в этом ответе . Далее, если у вас установлено bash-завершение, то, скорее всего, у вас уже имеется функция quote().

.
153
ответ дан 07.12.2019, 07:41

Теги

Похожие вопросы