이 명령을 이해할 수 없고 혼란스럽습니다. 작동 방식을 이해하기 위해 Linux에서 수행한 작업은 다음과 같습니다.
[root@testgfs2 final_scripts]# printf -- "#!${opt_E}"
printf -- "#reset{opt_E}"
#reset{opt_E}[root@testgfs2 final_scripts]# printf -- "#!${opt_E}"
printf -- "#"#reset{opt_E}"{opt_E}"
##reset{opt_E}{opt_E}[root@testgfs2 final_scripts]# echo !$
echo "#"#reset{opt_E}"{opt_E}"
##reset{opt_E}{opt_E}
이것이 어떻게 작동하는지, 어떤 테마에 나타나는지 모르기 때문에 Google에서도 찾을 수 없습니다.
--
printf 후에 무엇을 해야 할까요?
답변1
바라보다배쉬 참조 매뉴얼:
! ! :$
이전 명령의 마지막 매개변수를 지정합니다. 이는 !$로 축약될 수 있습니다.
불쾌한 행동이라면 도망가셔도 됩니다! 백슬래시 사용:
% echo "\!$"
!$
답변2
극중 캐릭터는 #!
이런 상황에서 특별하지 않다. 이 코드 조각은 두 개의 매개변수를 사용하여 명령을 printf -- "#!${opt_E}"
호출합니다 : , 및 변수 값과 연결됩니다 . 이 매개변수는 이후에 로 시작하는 매개변수가 있어도 옵션으로 해석되지 않음 을 나타냅니다 . 로 시작하지 않기 때문입니다 . 큰따옴표는 주석 시작 문자가 해석되는 것을 방지 하고 값이 와일드카드 패턴으로 해석되는 별도의 단어로 분할되는 것을 방지합니다.printf
--
#!
opt_E
--
printf
-
#!${opt_E}
-
#!${opt_E}
#
opt_E
값에 또는 문자가 opt_E
포함되어 있지 않으면 이 명령은 끝에 개행 문자 없이 뒤에 오는 값을 인쇄합니다 . 일반적으로 이 명령은 값을 printf 형식으로 해석합니다.%
\
#!
opt_E
opt_E
대화형 셸에서 이 작업을 시도하면 !
이전 명령을 자동으로 호출하는 기록 확장 문자로 해석된다는 점에서 이상한 효과를 볼 수 있습니다. 이를 방지하려면 작은따옴표로 문자 그대로 해석하기 \
전에 . 를 추가하세요 !
.!
printf -- '#!${opt_E}'
스크립트를 재생하려면 opt_E
먼저 올바른 값을 설정해야 합니다. 스크립트를 디버깅하려는 경우 set -x
두 번째 줄을 추가합니다(첫 번째 줄 바로 아래에 삽입 #!
). 쉘은 실행될 때 각 줄에 대한 추적 정보를 인쇄합니다.