암호가 필요한 명령줄이 있습니다. 비밀번호는 "!1" 문자로 시작됩니다. 예를 들어 '!1x9y377s'입니다. 해당 비밀번호로 명령을 실행하면 기록 확장이 발생하고 처음 두 문자 "!1"이 첫 번째 기록 항목으로 대체됩니다. 예를 들어
ll
...list entries
echo !1x9y377s
llx9y377s
하지만 내가 원하는 것은 :
ll
...list entries
echo !1x9y377s
!1x9y377s
연구
나는 이것이 bash 구문 분석 이전에 발생한 역사적 확장이라는 것을 금방 깨달았습니다. 검색한 내용: 명령줄에 전달된 비밀번호의 기록 확장을 방지하는 방법은 무엇입니까? 결과는 다음과 같습니다.
- 뿌리
- 씌우다
- 버클리 tcsh 문서 "'!'는 특별한 의미를 방지하기 위해 앞에 '\'를 붙일 수 있습니다."
나는 다음을 실행하려고 한다:
ll
...list entries
echo '!1x9y377s'
!1x9y377s
그리고
ll
...list entries
echo \!1x9y377s
!1x9y377s
둘 다 유효합니다.
답변1
이 문제를 해결하는 방법에는 두 가지가 있습니다. ~에 따르면버클리 문서: "The는 특별한 의미를 방지하기 위해 !
앞에 a가 올 수 있습니다 ."\
그러나 이스케이프를 원하지 않으면 비밀번호 주위에 작은따옴표를 사용하십시오. 예를 들어
ll
...list entries
echo '!1x9y377s'
!1x9y377s
Bash 매뉴얼에 따르면: 3.1.2.2 작은따옴표
문자를 작은따옴표(')로 묶으면 따옴표 안의 각 문자의 리터럴 값이 유지됩니다. 앞에 백슬래시가 있더라도 작은따옴표 사이에는 작은따옴표를 사용할 수 없습니다.