bash 스크립트에서 ${!} 및 ${!!}는 무엇을 의미합니까?

bash 스크립트에서 ${!} 및 ${!!}는 무엇을 의미합니까?

실제로 대답하기보다는 강박적으로 이것저것 말만 삭제하지 말고 누가 대답해 주시면 정말 감사하겠습니다.

명령이 있어요

#/bin/sh 
while :; \
do sleep 6h & wait $${!}; \ 

$$는 두 번째 프로세스인 SLEEP을 참조합니까? 그게 무슨 뜻이야 ${!}? 구문을 잘 모르겠습니다. 즉 흐름은 이해하지만 $$ 기호가 두 개 있는 이유와 {!}의 용도를 정확히 알 수 없습니다.

내 질문을 삭제하기 전에 누구든지 제게 깨우쳐 주시면 매우 감사하겠습니다. 감사합니다.

답변1

공식 문서에는 다음과 같이 나와 있습니다.

($!) 비동기 명령으로 실행되거나 bg 내장 함수를 사용하여 가장 최근에 백그라운드에 삽입된 작업의 프로세스 ID로 확장됩니다(작업 제어 내장 함수 참조).

https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Shell-Parameters

그리고 $${!}모두 ${!!}오류입니다.

게시된 대로 스크립트를 실행하면 다음 오류가 발생합니다.

./tst.sh: line 3: wait: `1234{!}': not a pid or valid job spec

여기서 1234는 셸 자체의 pid이며 $$문자열 {!}상수입니다.

구문상으로는 ${!!}정확하지만 변수를 간접적으로 확장하려고 시도하며 !이러한 변수는 실제로 존재할 수 없으므로 오류는 다음과 같습니다.${!!}: bad substitution

간접적인 설명은 다음과 같습니다. https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Shell-Parameter-Expansion

해당 코드가 있는 경우( 포함 $${!})실제로 작동한다. 그렇다면 이것은 쉘 스크립트가 아니라 다른 언어에 포함된 쉘 스크립트일 가능성이 높습니다. 변수를 표시하는 데에도 사용되는 것입니다 $. 이러한 언어 대부분은 반복되는 달러 기호를 이스케이프 기호로 사용하므로 $$anything호스트 언어가 이를 쉘 스크립트가 포함된 문자열로 완성한 후에는 가 됩니다.$anything

관련 정보