Много раз я запускал команду со всеми буквами в верхнем регистре (возможно, потому что CapsLockбыл включен), и я нажимал, Enterпрежде чем понять это.
Как я могу выполнить последнюю команду со всеми буквами, преобразованными в нижний регистр?
command-line
bash
history
Раду Рэдяну
источник
источник
!!:l
,Ответы:
Вы можете сделать это, добавив
??
в свой.bashrc
файл следующую небольшую функцию (я называю ее очень простой, но вы можете изменить это по своему желанию) :Далее, когда вы запустите:
последняя команда будет выполнена со всеми буквами в нижнем регистре.
объяснение
!!
: это часть инструментов истории bash, в частности, она расширяется до последнего запуска команды . Так, например,echo !!
распечатает последнюю команду, запущенную в этом конкретном сеансе оболочки."${@,,}
: Конструкция${foo,,}
преобразует содержимое переменной,$foo
преобразованной во все строчные буквы.$@
это массив позиционных параметров. При использовании внутри функции она расширяется до параметров, переданных этой функции.Итак,
"${@,,}"
просто преобразует все, что было передано функции в нижний регистр, а затем выполняет его. Следовательно, запуск??
функции с!!
параметром преобразует последнюю команду в нижний регистр и запускает ее.источник
"!!"
.??
преобразует свои аргументы букв в нижние и!!
автоматически переписывает предыдущую команду в текущей команде (поэтому??
принимает аргумент предыдущей команды).Ключ в
`
кавычках (backticks) - который запускает вывод как команду.источник
tr
будет моим первым выбором тоже. Также работает (альтернатива кавычкам и без скобок-классов POSIX):$( echo !! | tr '[A-Z]' '[a-z]')
тут приходит ответ программистов .... используйте python:
Или рубин
Или Perl (наверное, мой любимый):
Или PHP:
Или Awk:
Или сед:
Или Баш:
Или зш
Или NodeJS, если он у вас есть:
Вы также можете использовать
dd
(но я бы не стал!):Вы также можете создать небольшой скрипт для выполнения этой работы:
Который вы используете так:
источник
И один с
sed
,Пример:
Выход:
источник