Bash 스크립트의 느낌표와 터미널의 느낌표

Bash 스크립트의 느낌표와 터미널의 느낌표

나는 다음과 같은 간단한 bash 스크립트를 가지고 있습니다.foo.sh이와 같이:

#!/bin/bash

echo "Foo!"

./foo.sh메시지를 받았을 때 실행하면 Foo!모든 것이 정상입니다. 그러나 echo "Foo!"콘솔에서 직접 이동하면 예상되는 동작과 메시지가 나타납니다 bash: !": event not found.

내가 아는 한, the는 !이전 명령으로 렌더링되며 pe 작은따옴표 안에 사용되면 리터럴로 처리됩니다. 스크립트를 실행하는 것의 차이점이 무엇인지 궁금합니다 echo "Foo!". 작동하더라도 source ./foo.sh콘솔에서 직접 실행하는 것은 그렇지 않습니다.

답변1

기본적으로 대화형 bash 쉘은 기록 확장을 활성화합니다(이것이 동작을 제어합니다 !). 소스 파일(대부분 역사적 확장 개념 외부에 존재함)과 스크립트는 그렇지 않습니다. man bash( 또는온라인 매뉴얼):

set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
-H: !스타일 기록 교체를 활성화합니다. 이 옵션은 셸이 대화형일 때 기본적으로 활성화됩니다.

set [+-]H이 동작은 , 또는 를 사용하여 수동으로 조정할 수 있습니다. set [+-]o histexpand여기서 -H/-o 만들다역사적 확장 및 +H/+o 장애를 입히다그것.

예를 들면 다음을 참조하세요.

관련 정보