В bash, как мне избежать восклицательного знака?
Я хочу сделать что-то вроде bzr commit -m "It works!"
, Я могу избежать восклицательного знака, выполнив bzr commit -m "It works\!"
, Однако тогда мое сообщение commit включает обратную косую черту. Как избежать восклицательного знака, игнорируя обратную косую черту?
- Как добавить индикатор выполнения в сценарий оболочки?
- Bash: чтение строки в разделительной таблице в массив
- Как перебирать массив с помощью косвенной ссылки?
- Как проверить, существует ли программа из сценария Bash?
- Узнайте, существует ли имя пользователя
- Мониторинг файла до тех пор, пока не будет найдена строка
- Имейте файл с именем ~ (tilde) в моем домашнем каталоге
- Как перезагрузить .inputrc с помощью сценария bash?
Поскольку вы не зависите от 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