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

177

Есть ли способ в Bash вызвать аргумент предыдущей команды?

Я обычно делаю vi file.c, а затем gcc file.c.

Есть ли способ в Bash вызвать аргумент предыдущей команды?

Теги:
command

7 ответов

309
Лучший ответ

Вы можете использовать $_ или !$ для вызова последнего аргумента предыдущей команды.

Также Alt + . может использоваться для вызова последнего аргумента любой из предыдущих команд.

  • 96
    Кроме того, если вам нужен произвольный аргумент, вы можете использовать !!:1 , !!:2 и т. Д. ( !!:0 - сама предыдущая команда.) См. Gnu.org/software/bash/manual/bashref.html. # История взаимодействия
  • 30
    Подобно !$ , Вы используете !^ Для первого аргумента.
Показать ещё 3 комментария
104

Если предыдущая команда имела два аргумента, например

ls a.txt b.txt

и вы хотите первый, вы можете ввести

!:1

дает

a.txt

Или, если вы хотите оба, вы можете ввести

!:1-2

дает

a.txt b.txt

Вы можете расширить это на любое количество аргументов, например:

!:10-12
  • 0
    !:1-2 у меня не работает
  • 0
    @RNA, я просто попробовал еще раз, чтобы убедиться, что я не включил опечатку, не могли бы вы предоставить немного больше подробностей (например, командная строка ubuntu, cygwin для windows? Сообщение об ошибке? Предыдущая строка?)
Показать ещё 4 комментария
47

В командной строке вы можете нажать esc - . или alt + .

Он циклически проходит предыдущие аргументы, которые вы использовали.

  • 0
    Я всегда находил и клавиши для работы , а также.
24

!!:n где n - позиция нулевого аргумента, основанная на 0.

Например:

echo 'one' 'two'
# "one two"

echo !!:2
# "two"

Префикс ! используется для доступа к предыдущим командам.

Другие полезные команды:

  • !$ - последний аргумент предыдущей команды
  • !^ - первый аргумент (после программы/встроенный/ script) из предыдущей команды
  • !! - предыдущая команда (часто произносится "bang bang" )
  • !n - номер команды n от history
  • !pattern - самое последнее совпадение команд pattern
  • !!:s/find/replace - последняя команда, замените find на replace

Подробнее о истории команд

  • 5
    Вместо !!:s/find/replace вы также можете ^find^replace .
20

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

Используйте следующую команду, чтобы взять второй аргумент из третьей команды в истории,

!3:2

Используйте следующую команду, чтобы принять третий аргумент из пятой последней команды в истории,

!-5:3

Используя знак минус, вы просите его перейти от последней команды истории.

14

Да, вы можете использовать !$ для вызова последнего аргумента предыдущей команды.

  • 0
    Помните о ключевом слове «последний», особенно если ваша команда содержала несколько аргументов.
3

! * запускает новую команду со всеми предыдущими аргументами.

ls /tmp
cd !*
#you are now in /tmp

Ещё вопросы

Сообщество Overcoder
Наверх
Меню