Если вы уже знакомы с bash
, то работа с шаблонами подстановки истории не намного утомительнее, чем работа с любыми другими символами, специфичными для этой оболочки. Однако, если кто-то не знаком с оболочкой или просто никогда не использовал ее функции подстановки истории, очевидно, будет сюрпризом, когда ее сработают кажущиеся безобидными строки без кавычек или двойные -кавычки.
В интерактивной оболочке с включенной подстановкой истории символ !
является специальным почти так же, как и символ $
, т. е. везде, если только он не экранирован с помощью \
или в одинарных -кавычках..
В отличие от $
сквозных, подстановки истории не расширяются в здесь -документах, и, поскольку они ориентированы на строку -, они дополнительно будут происходить в строках, в которых подстановка попадает в контекст без кавычек или контекст с двойными кавычками (в этой строке при отдельном сканировании ). Дополнительную информацию см. в этом отчете об ошибке .
Подстановка истории отключена в сценариях, не -интерактивных оболочек (), потому что там не нужна возможность истории команд оболочки, а не потому, что эта функция имеет «серьезные проблемы». В сценарии сохранение каждой команды в $HISTFILE
не имеет смысла, и подстановка истории также не является чем-то, на что вы хотели бы полагаться в сценарии.
Должен ли он быть включен по умолчанию или нет в интерактивных оболочках, можно обсудить (, хотя я не совсем уверен, что дебаты здесь будут иметь большое значение для bash
разработчиков ). Кажется, вы думаете, что у большинства пользователей bash
проблемы с расширениями истории, но ни один из вас и я не знаем, насколько распространено их использование.
Оболочки Unix позволяют изменять поведение оболочки в соответствии со своими личными потребностями и вкусами. Если вы хотите отключить замену истории для всех ваших интерактивных оболочек,продолжайте делать то, что вы делаете, используя set +H
в вашем файле ~/.bashrc
, или лоббируйте разработчиков bash
для изменения значения по умолчанию (, что, я полагаю, расстроит и запутает больше людей, чем поможет ).
См. справочную страницу cat(1)
, в кратком изложении здесь говорится: «cat -объединяет файлы и печатает на стандартном выходе». Он принимает файлов , и вы даете ему каталог .