В bash, как мне избежать восклицательного знака?

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

Поскольку вы не зависите от bash, чтобы развернуть переменные в сообщении фиксации, вы можете использовать одинарные кавычки. Строки в одинарных кавычках не расширяются bash.

 bzr commit -m 'This does work!' 

Старый вопрос, который я знаю, но для будущих искателей:

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

 echo "It's broken"'!' 

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

Например:

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

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

Отключить расширение истории :

 set +H 

или

 set +o histexpand 

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

 bzr commit -m 'It works!' 

Я только что нашел другой способ, который, по крайней мере, будет работать с эхо-строками (предложениями), которые вы хотите перенести с восклицательным знаком. Он работает в конечном итоге, более или менее, вокруг BASH histexpand и занимает немного больше времени для кода.

Гек для восклицательного знака, как указано здесь http://www.ascii-code.com/ , равно 21, поэтому, если вы положите \ x21 в конец строки, «echo -e $ foo», сделайте $ foo Его собственное расширенное эхо [ie, foo = $ (echo -e "$ foo")], то, что вы получаете, когда вы снова эхо $ foo, является строкой с помощью! в конце. И никакого переключения histexpand тоже.

Работает в BASH 4+. Более ранние версии, ymmv.

BZT

  • Как добавить команду «tree» в git-bash в Windows?
  • Я случайно поменял символическую ссылку / bin / sh
  • Как цветной вывод grep
  • Каков допустимый диапазон для возвращаемого значения программы в Linux / bash?
  • Сценарий и аргументы оболочки Node.js
  • Тест для ненулевой строки длины в Bash: или
  • Как вы запускаете несколько программ параллельно из сценария bash?
  • Отменить удаление файла tar-файла
  • Как скопировать файл с именем, начинающимся с точки?
  • Синтаксическая ошибка Bash: неожиданный конец файла
  • Как подключить stderr, а не stdout?
  • Давайте будем гением компьютера.