Bash 명령 인수의 느낌표

Bash 명령 인수의 느낌표

Bash에 다음 명령을 입력하면:

echo "dog!!"

문자열을 이해하지 못합니다 dog!!. 대신 다른 걸 얻었어요.

"dog!!"문자열을 에코하려고 시도했지만 "dog\!\!작동하지 않았습니다.

느낌표가 두 개 있을 때 명령 매개변수를 사용하는 방법은 무엇입니까?

이 느낌표를 특별한 기능 없이 느낌표로 처리하고 싶습니다.

느낌표 두 개가 "!!"마지막 명령인 것 같습니다.

답변1

느낌표를 피하거나 다음을 사용해야 합니다.하나의인용 부호:

echo dog\!\!
echo 'dog!!'

(귀하의 것이 작동하지 않는 이유를 설명하지는 않지만 echo "dog\!\!"작동해야 하며 왜 작동하지 않는지 모르겠습니다. 또는 적어도 기록에서 작동해서는 안 됩니다. Bash에서는 인쇄됩니다 dog\!\!.)

답변2

Bash에서 느낌표를 항상 일반 문자로 처리하고 기록 확장이 필요하지 않게 하려면 현재 셸에서 이를 비활성화할 수 있습니다.

set +o histexpand

또는 다음 명령을 추가하십시오.일반적으로 사용되는 구성 파일, 즉 .bashrc모든 쉘에 대해 비활성화할 가능성이 높습니다.

답변3

존재하다리눅스 민트 18.1Ubuntu 16.04 기반:

bash --version | head -1
GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu)

동작은 다음과 같습니다.

echo dog\!\!

결과 :

dog!!
echo 'dog!!'

결과 :

dog!!
echo "dog!!"

갑자기 인쇄됨다음은 최종 명령입니다. 예를 들어 ls이전에 이 작업을 수행했다면 다음과 같이 인쇄됩니다.

echo "dogls"
dogls

존재하다GNU/리눅스 데비안 9 확장약간 더 새로운 버전이 있습니다:

bash --version | head -1
GNU bash, version 4.4.11(1)-release (x86_64-pc-linux-gnu)

동작은 다음과 같습니다.

echo dog\!\!

결과 :

dog!!
echo 'dog!!'

결과 :

dog!!
echo "dog!!"

갑자기 인쇄됨다음은 최종 명령입니다. 예를 들어 ls이전에 이 작업을 수행했다면 다음과 같이 인쇄됩니다.

echo "dogls"
dogls

이것은 나에게 일관된 것 같습니다.

이전 버전이 설치된 이전 시스템에서는 bash약간 다르게 동작할 수 있습니다. 그러나 새로운 시스템에서는 이러한 동작을 예상할 수 있습니다.

관련 정보