运行最后一个命令并将所有字母都转换为小写


15

很多次我都使用大写字母运行一个命令(也许是因为它CapsLock是开着的),我Enter在意识到这一点之前就按下了。

如何在所有字母都转换为小写的情况下运行最后一个命令?


遗憾的是您没有使用zsh。!!:l
凯文

Answers:


19

您可以通过在文件中添加以下小的函数(我称它??非常简单,但是您可以根据需要更改它)来实现这一点.bashrc

?? () { "${@,,}"; }

接下来,何时运行:

?? !!

最后一个命令将以所有小写字母运行。

说明

  • !!:这是bash历史记录工具的一部分,具体地说,它扩展到最后一个运行的命令。因此,例如,echo !!将打印出在此特定Shell会话中运行的最后一个命令。
  • "${@,,}:该构造${foo,,} 会将变量的内容$foo转换为所有小写字母。$@是位置参数的数组。在函数内部使用时,它将扩展为传递给该函数的参数。

因此,"${@,,}"只需将传递给函数的所有内容转换为小写,然后执行即可。因此,使用参数作为??函数运行该函数!!会将最后一个命令转换为小写并运行它。


7
也许您可以添加有关此工作原理的解释?您编写它的方式非常神秘。同样,它实际上并不起作用。如您所写,只有您的PWD为空时,它才能正常工作。您需要引用"!!"
terdon

1
@terdon现在,多亏了glenn,它在任何情况下都应该可以工作...而且没有太多解释:该函数??将其参数字母转换为小写字母,并!!自动重写当前命令中的前一个命令(因此??,参数上一个命令)。
RaduRădeanu2014年

6
回声!| tr'[:upper:]''[:lower:]'`

关键在`(反引号)引号中-该引号作为命令运行输出。


2
由于标记语言的原因,答案的第一个版本中的反引号不可见。无需为此投票(无需评论);只是编辑。
Rmano 2014年

tr也是我的第一选择。也可以使用(替代反引号,并且不使用POSIX括号类):$( echo !! | tr '[A-Z]' '[a-z]')
belacqua 2014年

4

这是程序员的答案。...使用python:

`echo "print '!!'.lower()" | python`

或Ruby:

`echo "print '!!'.downcase" | ruby`

或Perl(可能是我的最爱):

`perl -e "print lc('!!');"`

或PHP:

`php -r "print strtolower('!!');"`

或Awk:

`echo "!!" | awk '{ print tolower($1) }'`

或Sed:

`echo "!!" | sed 's/./\L&/g'`

或重击:

str="!!" ; ${str,,}

或zsh

echo "A='!!' ; \$A:l" | zsh

或NodeJS(如果有):

`echo "console.log('!!'.toLowerCase());" | node`

您也可以使用dd(但我不会!):

 `echo "!!" | dd  conv=lcase 2> /dev/null`

您还可以创建一个小的脚本来完成这项工作:

sudo bash -c 'cat << EOF > /usr/local/bin/lower
#!/usr/bin/python
import fileinput
print "".join(fileinput.input()).lower(),
EOF' && sudo chmod +x /usr/local/bin/lower

您可以这样使用:

`echo !! | lower`

1

还有一个sed

$(echo !! | sed 's/^\(.*\)$/\L\1/g')

例:

$ SUDO APT-GET UPDATE
SUDO: command not found
$ $(echo !! | sed 's/^\(.*\)$/\L\1/g')

输出:

$(echo SUDO APT-GET UPDATE | sed 's/^\(.*\)$/\L\1/g')
[sudo] password for avinash: 
0% [Waiting for headers] [Waiting for headers] [Waiting for headers] [Connectin^
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.