Как я могу получить конкретный аргумент из предыдущей команды в Bash?
31
В bash вы можете использовать !*все аргументы предыдущей команды. Например, если вы сделали, cp /some/path /some/other/pathа затем сделали mv !*, вторая команда будет расширена до mv /some/path /some/other/path.
Есть ли что-то подобное, что можно использовать для доступа к определенному аргументу команды вместо всех?
В !*, !является расширение истории префикс, и *это слово обозначение , что означает , что все аргументы. Вы можете запомнить общий синтаксис как bang-line-colon-column ( столбец !строки :). Существует множество возможных сочетаний клавиш: строка по умолчанию - это предыдущая строка, спецификатор столбца по умолчанию - «all», и вы можете опустить двоеточие, если спецификатор столбца не числовой (но !3будет означать строку 3). Вы можете использовать !:0для ссылки на имя команды !:1, !:2и т. Д., Чтобы ссылаться на последовательные аргументы, !:$на последнее слово, !:*на все аргументы и многое другое.
Я попробовал это сам, но это не сработало. Посмотрев на эту должность Michale Мрозек, это говорит использование !:1, !:2. После использования версии с двоеточиями все заработало.
Вуфферс
@MrMan: Ой, верно, если вы пропустите двоеточие с номером, число будет интерпретировано как номер строки. Прости за это.
Жиль "ТАК - перестань быть злым"
Нет проблем. Итак, тогда я предполагаю, что выполнение !1:1будет указывать на первый аргумент первой строки?
Wuffers
4
Лично мне очень не нравится эта функция «расширения с восклицательным знаком», которая будет даже мешать, если вы попробуете использовать echo "Hello World!"интерактивные оболочки (поэтому сценарии поиска, предполагающие, что они будут работать в неинтерактивном режиме, вообще не будут работать).
Итак, я устанавливаю set +o histexpandи начинаю вызывать аргументы следующим способом:
Esc,1,Esc,Ctrl-Y =>Insert first argument of previous command.
Обратите внимание, что трюк с Esc заключается в том, что у меня нет мета-ключа.
!:1
,!:2
. После использования версии с двоеточиями все заработало.!1:1
будет указывать на первый аргумент первой строки?Лично мне очень не нравится эта функция «расширения с восклицательным знаком», которая будет даже мешать, если вы попробуете использовать
echo "Hello World!"
интерактивные оболочки (поэтому сценарии поиска, предполагающие, что они будут работать в неинтерактивном режиме, вообще не будут работать).Итак, я устанавливаю
set +o histexpand
и начинаю вызывать аргументы следующим способом:Обратите внимание, что трюк с Esc заключается в том, что у меня нет мета-ключа.
источник
echo 'Hello, orld!'
. Обратите внимание на одинарные кавычки вместо двойных.