Как мне избежать! поэтому терминал видит закрывающую цитату для эха "Hello World!" - PullRequest
0 голосов
/ 07 мая 2020

Проблема:

Набрав echo "Hello World!" в терминал, я получаю ответ: dquote>

Вопрос ( 2-х частей):

Если я использую одинарные кавычки, терминал возвращает результат, который я ожидал увидеть: Hello World!

  1. Как избежать !?
  2. Почему здесь двойные кавычки отличаются от одинарных?

Я пробовал:

Использование backsla sh, echo "Hello World/!" вроде не работает, мне все равно вернули dquote>. Я также пробовал искать другие ответы на escape-символы и ответы на stackoverflow. Обычно они заходят мне в голову.

1 Ответ

0 голосов
/ 07 мая 2020

О вопросе 1: ( Как избежать !? )

Вы можете использовать "'!'"

Пример:

echo "Hello World"'!'""'!'" I'm there."

Результат:

Hello World!! I'm there.

О вопросе 2: ( Почему двойные кавычки отличается от одинарных кавычек здесь? )

Потому что ! является символом «раскрытия истории» по умолчанию, а внутри двойных кавычек выполняется «раскрытие истории».

Bash руководство:

3.1.2.2 Одиночные кавычки

Заключительные символы в одинарных кавычках (') сохраняют буквальное значение каждый символ в кавычках. Одинарные кавычки не могут находиться между одинарными кавычками, даже если им предшествует backsla sh.

3.1.2.3 Двойные кавычки

Заключительные символы в двойных кавычках (") сохраняют буквальное значение всех символов в кавычках, за исключением $, `, \ и, если включено расширение истории, !. Символы $ и ` сохраняют свое особое значение в двойных кавычках (см. Расширения оболочки ). Backsla sh сохраняет свое особое значение, только если за ним следует один из следующих символов: $, `, ", \ или перевод строки. В двойных кавычках удаляются обратные косые черты, за которыми следует один из этих символов. Обратные косые черты перед символами без специального значения остаются неизменными. Двойные кавычки можно заключить в двойные кавычки, поставив перед ними backsla sh. Если этот параметр включен, расширение истории будет выполняться, если только !, появляющееся в двойных кавычках, не экранируется с помощью обратной косой черты sh. Backsla sh перед ! не удаляется.

Специальные параметры * и @ имеют особое значение в двойных кавычках (см. Расширение параметров оболочки ).

...