쉘 명령에서! # : 3의 의미


29

ack 용 설치 안내서는 다음 명령을 사용하여 ack 스크립트를 설치하도록 제안합니다.

curl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755 !#:3 

!#:3끝에는 일종의 역 참조 라고 가정 하지만 그 의미는 무엇입니까? zsh에 해당하는 것이 있습니까? Google은 도움이되지 않았습니다.


5
배쉬를 가정; man bash, 그리고 HISTORY EXPANSION
Jeff Schaller

1
고양이가 정말 나쁜 시간에 키보드를 가로 질러 걸었다는 뜻입니다.
IQAndreas

@IQAndreas : 글쎄, 그것은 유효한 명령이므로, 고양이는 고양이 타이핑 탐지기 를 물리 칠만큼 영리해야합니다 . 분명히 이것은 쓸모없는 고양이가 아닙니다. :-) ⁠
G-남자 '는 분석 재개 모니카'말한다

답변:


32

이것은 bash로 확장 된 특수 구문입니다. zsh에서도 작동합니다.

bash 맨 페이지 (섹션 HISTORY EXPANSION)에 따르면 패턴은 다음과 같이 확장됩니다.

  • 이벤트 지정자 !# 입니다 지금까지 입력 한 전체 명령 행을 말한다curl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755
  • :이벤트 지정자 (이 경우 전체 행)와 단어 지정자 (하위 파트 선택 ) 사이를 분할 합니다.
  • 워드 부호 3 선택 셋째 ,이 경우에는, 워드 / 인수 (제로에서 시작 워드의 카운팅) ~/bin/ack.

최종 명령 행 (일반적으로 실행 전에 표시됨)은 다음과 같습니다 curl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755 ~/bin/ack.

자세한 내용은 bash 매뉴얼 또는 zsh 매뉴얼 과 매우 유사합니다.


7
나는이 기능이 좋은 아이디어라고 누가 생각 했을까?
Rhymoid

3
@Rhymoid, 내가 사용하지 않는 !#많은,하지만 !!, !$, !*, !sud:p및 많은 다른 사람은 모두 매우 유용하며 나는 그들에게 모든 시간을 사용합니다. 확인 unix.stackexchange.com/a/67/135943
와일드 카드

11

에서 bash기록 대체입니다 (모든 기록 대체는로 시작 함 !). 특히, !#지금까지 명령 행의 모든 ​​것을 의미하며 ': 3'은 세 번째 단어 (시작은 0부터 시작 함)를 의미합니다.

위의 명령은로 번역 !#:3됩니다 ~/bin/ack.

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