기록의 마지막 명령에서 두 번째 인수에 액세스하는 방법은 무엇입니까?


11

정규식을 배우기 시작했기 때문에이 명령을 반복적으로 사용합니다.

grep pattern /usr/share/dict/american-english 

패턴이있는 부분 만 변경되므로 " / usr / share / dict / american-english " 라는 긴 표현을 반복 해서 써야 합니다.

누군가는 전체 표현 대신 암호 문자 조합을 입력하여 명령 기록에서 명령 인수를 확장 할 수 있다고 언급했습니다. 그 비밀스러운 문자 조합을 말해 줄 수 있습니까?


두 번째 논쟁이나 마지막 논쟁에 관한 것입니까?
mikeserv

바로이 경우 마지막 논거는 두 번째 논거이며, 나는이 구분을 명확히하지 않았다.
Abdul Al Hazred

이 경우, bash, dash, zsh, mksh,와 ksh(I 대해 알고 적어도 있음) 모든 인식 $_마지막 인수 특수 매개 변수를 (일부는하지만, 단지 대화 형 모드에서 그렇게) . 변수처럼 확장됩니다 grep somepattern filename; grep otherpattern "$_". 일반적으로의 출력에서 ​​해당 내용을 볼 수 있습니다 set.
mikeserv

답변:


23

당신은 사용할 수 있습니다 <M-.>(또는 <Esc>., 즉, 메타 점 (또는 <Esc>를 점), 메타 보통 Alt 키이고, 이전 명령의 마지막 인수를 기억하기 위해 메타 키가 다른 것에 사용되는 경우). 먼저

$ grep foo /usr/share/dict/american-english

그리고 다른 것을 위해 grep하고 싶다면

$ grep bar

공백을 입력 한 후 Esc.(즉, 먼저 이스케이프 키를 누른 다음 마침표 키를 누름) :

$ grep bar /usr/share/dict/american-english

다음 중 하나를 사용할 수도 있습니다.

$ grep bar !:2
$ grep bar !$

어디 !:2!$각각 평균 "두 번째 인자"와 "마지막 인수".


이 배쉬 및 사용의 readline이 이맥스 (기본값) 바인딩을 사용하는 것이 쉘입니다 :로 editing-mode vi설정하면 바인딩 추가 할 필요 ~/.inputrc에 대해 yank-last-arg당신이 바인딩에 필요 zsh을위한을 insert-last-word...
jasonwryan

그 다음의 어떤에서 당신이 원하는 마지막 인수, 만약 @jasonwryan, (대화 형) zsh , bash, ksh, mksh, 또는 dash껍질 그냥 사용할 수 있습니다 $_. POSIXLY는 바인딩이 이미 유효 ESC _할 때 이미 설정 set -o vi되어 있습니다.
mikeserv

@ mikeserv 감사합니다 마이크, 나는 호환성을 위해 그것을 반동해야합니다 ...
jasonwryan

@ Jasonwryan-문제 없음-이것은 내가 아는 유일한 쉘 키보드 트릭 일뿐입니다. 빠른 유형의 모든 단축키를 기억하고 구성하는 데 어려움이 있습니다. 마음에 들지 않으면 무엇과의 호환성? 다르게 사용하는 프로그램이 있습니까? 또한 _letter별칭 바인딩에 대해 ESC @letter를 기억할 수 있지만 bsd로 작동시키는 방법을 여전히 알 수 없기 때문에 editline.
mikeserv

@ mikeserv 나는 Bash 또는 Zsh (vi 모드 모두)를 사용하든 Emacs 모드에서 Bash가있는 머신 (실제로 망치로 묶는 바인딩 중 하나)에 관계없이 동일하게 바인딩합니다.
jasonwryan

2

일반적으로 (Bash 포함) <Esc> N <Esc> .은 이전 명령에서 현재 명령 행으로 N 번째 인수를 호출합니다 (여기서 N은 0 기반 임).

마지막 명령의 두 번째 인수는 다음과 같습니다.

<Esc> 1 <Esc> .

세 번째 주장을 원한다면

<Esc> 2 <Esc> .

... 등등.

다른 사람들이 언급했듯이, 이전 명령 의 마지막 인수 를 원한다면 그에 대한 특정 바로 가기가 있습니다.

<Esc> .

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