Как я могу получить определенный аргумент от предыдущей команды в ударе?

В ударе можно использовать !* получить все аргументы от предыдущей команды. Как пример, если Вы сделали cp /some/path /some/other/path и затем сделал mv !*, вторая команда была бы расширена до mv /some/path /some/other/path.

Есть ли что-нибудь как это, которое может использоваться для доступа к определенному аргументу от команды вместо всех них?

31
задан 21.08.2011, 13:25

2 ответа

В !*, ! префикс расширения истории, и * указатель слова, который означает все аргументы. Можно запомнить общий синтаксис как bang-line-colon-column (!строка:столбец). Существует много возможных ярлыков: строка по умолчанию является предыдущей строкой, спецификатор столбца по умолчанию - “все”, и можно бросить двоеточие, если спецификатор столбца является нечисловым (но !3 означал бы строку 3). Можно использовать !:0 относиться к названию команды, !:1, !:2, и т.д., для обращения к последовательным аргументам, !:$ для последнего слова, !:* для всех аргументов, и т.д.

См. также это сообщение Michael Mrozek в Exchange Стопки Unix.

38
ответ дан 07.12.2019, 09:14

Лично, мне действительно не нравится это “расширение с восклицательным знаком” функция, которая даже нарушит, если Вы попробуете echo "Hello World!" в интерактивных оболочках (настолько получающие сценарии, которые предполагают, что будут выполнены в неинтерактивном режиме, не будут работать вообще).

Так, я установил set +o histexpand и начните вспоминать споры со следующим методом:

Esc, 1, Esc, Ctrl-Y => Insert first argument of previous command.

Обратите внимание, что Esc-прием - то, потому что у меня нет метаклавиши.

4
ответ дан 07.12.2019, 09:14

Теги

Похожие вопросы