В ударе можно использовать !*
получить все аргументы от предыдущей команды. Как пример, если Вы сделали cp /some/path /some/other/path
и затем сделал mv !*
, вторая команда была бы расширена до mv /some/path /some/other/path
.
Есть ли что-нибудь как это, которое может использоваться для доступа к определенному аргументу от команды вместо всех них?
В !*
, !
префикс расширения истории, и *
указатель слова, который означает все аргументы. Можно запомнить общий синтаксис как bang-line-colon-column (!
строка:
столбец). Существует много возможных ярлыков: строка по умолчанию является предыдущей строкой, спецификатор столбца по умолчанию - “все”, и можно бросить двоеточие, если спецификатор столбца является нечисловым (но !3
означал бы строку 3). Можно использовать !:0
относиться к названию команды, !:1
, !:2
, и т.д., для обращения к последовательным аргументам, !:$
для последнего слова, !:*
для всех аргументов, и т.д.
См. также это сообщение Michael Mrozek в Exchange Стопки Unix.
Лично, мне действительно не нравится это “расширение с восклицательным знаком” функция, которая даже нарушит, если Вы попробуете echo "Hello World!"
в интерактивных оболочках (настолько получающие сценарии, которые предполагают, что будут выполнены в неинтерактивном режиме, не будут работать вообще).
Так, я установил set +o histexpand
и начните вспоминать споры со следующим методом:
Esc, 1, Esc, Ctrl-Y => Insert first argument of previous command.
Обратите внимание, что Esc-прием - то, потому что у меня нет метаклавиши.