it-swarm-ko.tech

bash에서 느낌표 (!) 이해

나는 사용했다

history | less

이전 명령의 줄과 왼쪽의 숫자를 얻으려면 반복하려는 줄을 찾았습니다 (예 : 22).

!22

명령 프롬프트에서 작동했고 그 당시 내가 한 줄에서 명령 세트를 실행했습니다. 느낌표가 사용되는 위치, bash가 취한 조치 및 사용 위치의 관점에서 무엇을 나타내는 지 알 수 없습니다. 문서에서 '유형'인 설명이 보이지 않습니다.

112
Vass

!는 원래 C Shell 에 나타난 기능으로, 터미널을 사용하여 화살표 키를 사용할 수 있기 전날입니다. 프롬프트에 현재 명령 번호를 추가 할 때 특히 유용합니다 (PS1="\!$ ") 그래서 당신은 과거의 명령에 대한 숫자를 얻기 위해 화면을 빠르게 볼 수 있습니다.

이제 화살표 키와 같은 것을 사용할 수 있습니다. Ctrl-R 명령 기록을 검색하기 위해이 기능을 많이 사용하지는 않습니다.

여전히 유용하다고 생각되는 한 가지 변형은 !!, 이전 명령을 다시 실행합니다. 그 자체로는 찾지 못했습니다 !!Enter 그냥보다 빨리 Enter더 큰 명령으로 결합하면 도움이 될 수 있습니다.

예 : Sudo 기반 시스템에서 일반적인 파일럿 오류 추가 권한이 필요한 명령의 Sudo 접두사 초보자는 전체 명령을 다시 입력합니다. 부지런한 학생은 셸의 명령 기록에서 명령을 편집합니다. 계몽 된 한 가지 유형 Sudo !!.

Bash를 사용하면 ! 쉘에서 set +o histexpand 또는 set +H. Zsh에서 set -K.

157
Warren Young

더 이상 대답이 없으면 최근에 한 사람을 읽었 기 때문에 슈퍼 유저에 대한 답변이 있습니다. bash man page 에서 문제에 대한 HISTORY EXPANSION 이라는 거대한 섹션을 찾을 수 있습니다.

마지막 명령 또는 명령 번호 X를 실행하는 것보다 전체 호스트를 수행 할 수 있습니다. !catcat로 시작한 마지막 명령을 실행합니다. 또는 !?bash?:s/bash/csh/bash를 포함하는 마지막 명령을 실행하지만 csh로 바꿉니다.

52
Cry Havok

다음과 같이 !로 더 많은 작업을 수행 할 수 있습니다.

  • 3 개의 명령 앞에 입력 된 명령을 실행합니다 : !-3
  • !ls로 시작하는 명령을 실행하십시오.

그리고 훨씬 더. 15 리눅스 배쉬 히스토리 확장 예제를 참고하십시오

40
user379997

물론 bash 쉘에서 마지막 명령을 재사용하기 위해 !!를 수행 할 수 있습니다. 그리고 마지막 명령의 마지막 부분을 재사용 할 수있는 !$가 있습니다.

예 : 일부 파일을 봅니다.

less path/to/your/file.txt

동일한 파일을 편집하려면 !$를 사용하여 마지막 명령에서 파일 경로 만 가져올 수 있습니다.

vim !$

편집하다:

!*와 함께 이전 명령의 모든 인수를 사용할 수 있습니다.

예 : 파일을 생성하고 모두 제거합니다.

$ touch a.txt b.txt c.txt d.txt
$ rm !*

다시 말하지만, 이전 명령의 특정 인수를 사용할 수 있습니다

예 : 이렇게하면 4 개의 파일이 만들어지고 세 번째 파일 (c.txt)이 제거됩니다.

$ touch a.txt b.txt c.txt d.txt
$ rm !:3

마찬가지로 다음과 같이 마지막 명령에서 다양한 인수를 사용할 수 있습니다

$ touch a.txt b.txt c.txt d.txt
$ rm !:2-4

표현식을 rm b.txt c.txt d.txt로 평가하는 인수 2-4를 재사용합니다.

6
Teshan Shanuka J

내 친구가 저에게 이메일을 보냈습니다.

GNU 기록 라이브러리의 일부입니다. bash에서는 기록에서 명령을 다시 실행하는 데 사용됩니다. 하드 코어가 되려면 bash-4.1/lib/readline/histexpand에서 history_expansion_char를 grep하십시오. .c 구현 세부 사항.

4
Vass