すべての文字を小文字に変換して最後のコマンドを実行します


15

多くの場合、すべての文字を大文字にしてコマンドを実行し(おそらくCapsLockオンだったため)、Enterこれを認識する前に押しました。

すべての文字を小文字に変換して最後のコマンドを実行するにはどうすればよいですか?


zshを使用していないのは残念です。!!:l
ケビン

回答:


19

ファイルに次の小さな関数(??非常に単純であると呼びますが、必要に応じて変更できます)を追加することで、これを実現でき.bashrcます。

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

次に、実行するとき:

?? !!

最後のコマンドは、すべての文字を小文字にして実行されます。

説明

  • !!:これはbashの履歴ツールの一部であり、具体的には、最後のコマンドrunまで展開されます。したがって、たとえば、echo !!この特定のシェルセッションで最後に実行されたコマンドを出力します。
  • "${@,,}:コンストラクト${foo,,} 、変数の内容$fooをすべて小文字に変換します。$@位置パラメータの配列です。関数内で使用される場合、その関数に渡されるパラメーターに展開されます。

したがって、"${@,,}"関数に渡されたものをすべて小文字に変換してから実行します。したがって、パラメーターとして??関数を実行!!すると、最後のコマンドが小文字に変換されて実行されます。


7
おそらく、これがどのように機能するかの説明を追加できますか?あなたが書いた方法は非常に不可解です。また、実際には機能しません。あなたが書いたように、あなたのPWDが空の場合にのみ正しく動作します。引用符で囲む必要があります"!!"
テルドン

1
今@terdon、グレンのおかげで、それはどのような場合には動作するはず...と説明するのはあまり何もありません:関数は??lowercaesとにその引数の文字を変換し、!!再書き込み、現在のコマンドでautomaticaly前のコマンド(そう??として取り引数は前のコマンド)。
ラドゥラディアナヌ

6
`エコー!! | tr '[:upper:]' '[:lower:]' `

キーは`(バッククォート)引用符の中にあります-これは出力をコマンドとして実行します。


2
マークアップ言語により、最初のバージョンの回答では見えないバックティック。このために(コメントなしで)投票する必要はありません。編集するだけです。
Rmano

tr私の最初の選択でもあります。動作します(バック$( echo !! | tr '[A-Z]' '[a-z]')
ティックの

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'`

またはBash:

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^
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.