Bash에서 느낌표를 입력하는 것은 무엇을 합니까?

Bash에서 느낌표를 입력하는 것은 무엇을 합니까?

Bash는 다음 질문에 대한 답변에 설명된 대로 기록 확장을 위해 느낌표를 사용합니다.이 문제(예: sudo !!이전 명령줄 실행 사용 sudo) 그러나 다음 명령(예: 단일 느낌표)을 실행하는 작업을 설명하는 곳을 찾을 수 없습니다.

!

아무 것도 인쇄하지 않고 1로 종료되는 것 같지만 왜 이렇게 되는지는 잘 모르겠습니다. 온라인과 Bash 매뉴얼 페이지를 보았지만 "예약어"라는 사실 외에는 아무것도 찾을 수 없었습니다. 그러나 }다음 명령을 실행했습니다.

}

인쇄 오류:

bash: syntax error near unexpected token `}'

답변1

외톨이!명령 시작 시 명령 또는 파이프의 종료 상태를 무효화합니다.: 명령이 종료되면 (실패) 0로 전환되고 , 0이 아닌 값으로 종료되면 (성공) 종료 1로 전환됩니다 .0

이 사용법은 Bash 매뉴얼에 문서화되어 있습니다.

예약어 '!'가 파이프 앞에 오면 종료 상태는 위의 종료 상태에 대한 논리적 부정입니다.

후속 명령이 없는 A는 !아무 작업도 수행하지 않고 true를 반환하는 빈 명령을 무효화합니다(:명령). 따라서 true를 false로 반전하고 상태 1로 종료되지만 오류가 발생하지 않습니다.


!안에는 다른 용도도 있어요test그리고[[조건부 테스트를 무효화하는 명령. 이것들은 당신이 보고 있는 것과 아무 관련이 없습니다. 귀하의 질문과 이러한 경우에는 역사적 확장과 관련이 없으며 !다른 용어와 별개입니다.

답변2

bash 매뉴얼 섹션에서 문서화된 단일 느낌표를 찾을 수 있습니다.3.2.2 파이프라인

예약어 '!'가 파이프 앞에 오면 종료 상태는 위의 종료 상태에 대한 논리적 부정입니다.

$ ! true; echo $?
1
$ ! false; echo $?
0

축제로 돌아가기3.2.4.2 조건부 구성

! 표현하다

표현식이 거짓이면 참입니다.


축제로 돌아가기4.1 Bourne Shell 내장 기능

! 표현

expr이 거짓이면 참입니다.


!공백, 탭, 줄 끝, "=" 또는 "("(내장 shopt를 사용하여 extglob 쉘 옵션이 활성화된 경우)이 뒤따르지 않는 한 기록 교체가 시작된다는 점도 주의해야 합니다 .

답변3

!비교와 수단으로 사용되기 때문에아니요.

예를 들어:

a=3
b=2

[ $a -eq $b ] && echo "Equal"
[ ! $a -eq $b ] && echo "Not equal"
# of cause last comparison is possible to write as:
[ $a -eq $b ] || echo "Not equal"

[ $a -eq $b ]
echo $?
1
[ ! $a -eq $b ]
echo $?
0

답변4

! 문자열 뒤에는 주어진 문자열로 시작하는 가장 최근 명령(여전히 명령 버퍼에 있음)을 실행합니다. 아마도 껍질이 방금 발견되었을 수도 있습니다.아니요이전 명령은 <null>로 시작되었습니다.

관련 정보