Я хочу сделать что-то вроде bzr commit -m "It works!"
. Я могу как-то избежать восклицательного знака bzr commit -m "It works\!"
. Тем не менее, мое сообщение о фиксации содержит обратную косую черту. Как мне избежать восклицательного знака, игнорируя при этом обратную косую черту?
bash
syntax
escape-characters
Мэтью
источник
источник
bzr commit -m "It works"!
тоже.bzr commit -m "It works!"
Ответы:
Поскольку вы не зависите от bash для расширения переменных в сообщении фиксации, вы можете вместо этого использовать одинарные кавычки. Строки в одинарных кавычках не раскрываются с помощью bash.
источник
Вот другой метод, если вы хотите двойные кавычки, а также восклицательный знак:
Это работает, даже если
!
это не в конце строки.Например:
Бонус: аналогичная техника может быть использована для экранирования любого текста в Sh или Bash (с помощью sed): см. Первый вариант в этом ответе . Кроме того, если вы
bash-completion
установили, скорее всего, этаquote()
функция уже доступна.источник
echo "Happy birthday!"
будет работать как положено, в противном случае вы можете избежать обратной косой черты, но обратная косая черта будет напечатана, а XD Bash не для слабонервных :)echo "Happy Birthday!"
выводит 2 строки. Первый - этоecho "Happy birthday"
(без восклицания), а второй - «С днем рождения» (опять же, без восклицания). У вас включено расширение истории при выполнении этого теста?version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
определенно используется только один!
. Яhistexpand
присутствовал в$SHELLOPTS
. Тем не менее, я просто попробовал 4.3.18 (2) -релиз на другом компьютере, и он ведет себя так, как вы описали. Я думаю, это была ошибка, которая была исправлена.Отключить расширение истории :
или же
Вы можете добавить одну из этих команд к себе,
~/.bashrc
если вы обычно не используете расширение истории.В Bash 4.3 добавлен особый случай :
источник
set +o histexpand
, а неset -o histexpand
. Не могли бы вы отредактировать свой ответ, чтобы это исправить?.bashrc
thx !!, никогда не использовавшемуся!
в скриптах и ни за что !! это всегда беспокоило ...echo "@AquariusPower!"
Используйте одинарные кавычки (') вместо двойных кавычек ("). Одинарные кавычки отключают всю интерпретацию содержимого в них, в то время как двойные кавычки отключают только некоторые.
источник
Я только что нашел другой способ, который будет по крайней мере работать со
echo
строками (предложениями), которые вы хотите акцентировать восклицательным знаком. Он выполняет более или менее конечный прогон вокруг своей вершины Bash и занимает чуть больше времени для кодирования.Гекс для восклицательного знака, как указано на http://www.ascii-code.com/ , равен 21, поэтому, если вы поместите
\x21
в конец своей строкиecho -e $foo
, сделайте$foo
свое собственное расширенное эхо [то есть,foo=$(echo -e "$foo")
] то, что вы получить, когда выecho $foo
снова это строка с!
в конце. И никакого переключения его оси тоже нет.Работает наверняка в Bash 4+. Более ранние версии, ymmv.
источник
printf "OMG\041"
. Если вы строите строку в двойных кавычках где-то, которая не является echo или printf, как об этом спрашивала OP строка коммита, вы можете вставить$(echo -e "\041")
строку, где должен быть восклицательный знак. Как это:bzr commit -m "This is a great commit$(echo -e "\041")"
.