Intereting Posts
Синтаксис HISTTIMEFORMAT Как отобразить имя текущего Virtualenv? X Изображение после курсора указателя мыши Разработка программного обеспечения на Linux Сравнение двух файлов и запись несогласованных строк вместе с несогласованными столбцами. Указание несогласованных столбцов – это моя основная проблема Как проверить терминал, если какой-либо GUI установлен в UBUNTU Как удалить строки короче XY? Покажите, кому принадлежит файл? Есть ли LC_COLLATE, который сортирует точку перед тире? Не удается аутентифицировать учетную запись администратора в Linux Mint Что такое код ошибки 68 для msmtp и какие проблемы могут спровоцировать его? Количество ядер процессора в зависимости от частоты ядер в Qemu / Virtualbox Приложения GTK выглядят плохо Неправильное кодирование имени файла в KDE, но верно в GTK / tty1 / Почему libpam-systemd запускается интерактивно при обновлении apt, даже если указанная команда force-confdef / force-confold

эхо-символы в терминале / bash

Почему я не могу использовать «!» при попытке эхо-сообщения в терминале? Например:

echo -e "Hello\nWorld!" 

bash возвращает следующую команду:

 bash !: event not found 

! символ называется «bang», а bash использует его для вызова истории команд. Вы можете использовать его четырьмя способами:

 !<firstFewCharsOfPreviousCommand> 

пример:

 !rm 

Это перейдет к последней выполненной вами команде, которая начиналась с «rm» и выполняла все это. Будьте осторожны, повторяя потенциально разрушительные команды, такие как rm, так как вы можете непреднамеренно выполнить другой, чем вы думали. Выше показана только иллюстрация, используя функцию обратного поиска CTRL-R , основанную на bash, является гораздо более безопасной альтернативой.

 !<indexInCommandHistory> 

пример:

 !433 

Индекс – это число, которое появляется рядом с командой при запуске команды history .

 !! 

Никакого примера не нужно, так как все это для него. Он повторно выполняет сразу же предыдущую команду (такую ​​же, как стрелка вверх для большинства дистрибутивов Linux).

 !$ 

Пример:

 # ls -lh /etc/fstab # vi !$ 

Еще один литерал, когда bash выполняет это, переменная !$ Заменяется последним словом (строка символов без пробелов)

Как вы можете видеть с последним, вы можете использовать его как часть большей или другой команды. Еще один пример этого !! :

 [root@hypervisor libsceptre]# echo hey hey [root@hypervisor libsceptre]# echo !! echo echo hey <-- printed to stderr so you know what !! was expanded to echo hey [root@hypervisor libsceptre]# 

Если вы хотите, чтобы bash, по какой-либо причине, рассматривал символ как литерал и не пытался его интерпретировать, вы помещали текст в одинарные кавычки:

 [root@hypervisor libsceptre]# echo -e "Hello\nWorld!" -bash: !": event not found [root@hypervisor libsceptre]# echo -e 'Hello\nWorld!' Hello World! [root@hypervisor libsceptre]# 

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

Если вы не используете расширение истории (и, очевидно, нет), вы должны скорее отключить его, чем изучить странные правила цитирования и торможения.

set +H или set +o histexpand избавляет вас от этого. Вы можете проверить, активен ли он echo $- («H» показывает, что он активен) или set -o ( histexpand ).

Вам нужно убежать от удара:

echo -e "Hello\nWorld"\!
Примечание: наличие за пределами цитат преднамеренно. В противном случае \! это эход.

Особый смысл ! все еще активна внутри двойных кавычек. ! это ключевое слово оболочки, которое, например, принимает целое число n в качестве аргумента и запускает команду n'th в вашей истории оболочки. Используйте одиночные кавычки или избегайте символа, чтобы избежать путаницы.

Вы можете больше узнать о расширении команды истории в man history .