Bash에서 큰따옴표 사이에 "!" 기호를 쓰는 방법은 무엇입니까? [복사]

Bash에서 큰따옴표 사이에 "!" 기호를 쓰는 방법은 무엇입니까? [복사]

!큰따옴표로 묶인 문자열에 기호를 넣을 때 bash 스크립트에 기호를 쓰는 방법을 모르겠습니다.

예를 들어:

var="hello! my name is $name! bye!"

뭔가 미친 일이 일어났습니다:

$ age=20
$ name='boda'
$ var="hello! my name is $name! bye!"

마지막 명령에서 Enter 키를 누르면 마지막 명령 없이 명령이 반복됩니다(자체 입력) !.

$ var="hello! my name is $name! bye"

Enter를 다시 누르면

$ var="hello! my name is $name bye"

Enter를 다시 누르면 사라지고 출력이 없습니다.

$ 

내가 이것을 시도하면 :

$ echo "hello\! my name is $name\! bye\!"

그러면 다음과 같이 출력됩니다.hello\! my name is boda\! bye\!

작은따옴표를 사용하면 내 이름이 확장되지 않습니다.

$ echo 'hello! my name is $name! bye!'

출력은 다음과 같습니다hello! my name is $name! bye!

나는 이것을 작동하고 있습니다 :

$ echo "hello"'!'" my name is $name"'!'" bye"'!'

하지만 이해/편집/유지/업데이트가 엉망 "이고 불가능합니다.'

누구든지 도와줄 수 있나요?

답변1

발견한 대로 !작은따옴표 안의 기록 확장은 트리거되지 않습니다.

작은따옴표로 묶인 기호가 포함된 형식 문자열을 사용할 수 있습니다 printf. !예를 들어:

$ name="boda"
$ printf 'hello! my name is %s! bye!\n' "$name"
hello! my name is boda! bye!

또는

$ name="boda"
$ var=$(printf 'hello! my name is %s! bye!\n' "$name")
$ echo "$var"
hello! my name is boda! bye!

답변2

다음을 통해 기록 확장을 비활성화합니다. 대화형 셸에서만 활성화합니다 set +H.

관련 정보