모든 문자를 소문자로 변환하여 마지막 명령 실행


15

여러 번 대문자로 모든 명령을 실행했으며 (설정되어있을 수 있음)이를 실현하기 전에 CapsLock눌렀습니다 Enter.

모든 문자를 소문자로 변환하여 마지막 명령을 어떻게 실행할 수 있습니까?


zsh를 사용하지 않는 것이 부끄러운 일입니다. !!:l.
케빈

답변:


19

파일에 다음과 같은 작은 기능을 추가하여이를 달성 할 수 있습니다 ( ??매우 간단 하다고 부르지 만 원하는대로 변경할 수 있습니다) .bashrc.

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

다음으로 실행할 때 :

?? !!

마지막 명령은 모든 문자를 소문자로 실행합니다.

설명

  • !!: 이것은 bash의 히스토리 도구의 일부이며, 특히 마지막 명령 실행으로 확장됩니다 . 예를 들어, echo !!이 특정 쉘 세션에서 실행 된 마지막 명령을 인쇄합니다.
  • "${@,,}: 구문 ${foo,,} 변수 의 내용$foo 을 모두 소문자로 변환합니다. $@위치 매개 변수의 배열입니다. 함수 내에서 사용되면 해당 함수에 전달 된 매개 변수로 확장됩니다.

따라서 "${@,,}"함수에 전달 된 모든 것을 소문자로 변환 한 다음 실행합니다. 따라서 매개 변수로 ??함수를 실행하면 !!마지막 명령이 소문자로 변환되어 실행됩니다.


7
아마도 이것이 어떻게 작동하는지에 대한 설명을 추가 할 수 있습니까? 당신이 쓴 방식은 매우 비밀입니다. 또한 실제로는 작동하지 않습니다. 작성한대로 PWD가 비어있는 경우에만 제대로 작동합니다. 을 인용해야합니다 "!!".
terdon

1
이제 @terdon, 글렌 덕분에, 어떤 경우에 작동합니다 ... 그리고 설명하기 너무 많이 아무것도 없다 : 함수는 ??lowercaes하고 해당 인수의 문자로 변환 !!다시 쓰기 현재 명령에서보기 자동 이전 명령 (그래서 ??으로한다 이전 명령을 인수).
Radu Rădeanu

6
`에코! | tr '[: 위쪽 :]' '[: 아래쪽 :]'`

키는 `(백틱) 따옴표 안에 있습니다.이 명령은 출력을 명령으로 실행합니다.


2
마크 업 언어로 인해 답변의 첫 번째 버전에서 보이지 않는 백틱. 이를 위해 의견을 제시하지 않아도됩니다. 그냥 편집하십시오.
Rmano

tr나의 첫번째 선택 일 것이다. 또한 작동합니다 (백틱과 POSIX 대괄호없이) :$( echo !! | tr '[A-Z]' '[a-z]')
belacqua

4

여기에 프로그래머가 대답합니다 .... 파이썬을 사용하십시오 :

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

또는 루비 :

`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^
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.