기본 제공 표현식은 set -x
추적을 활성화하여 와일드카드 뒤, 실행 전에 각 명령을 인쇄합니다. 제가 궁금한 점은 set -x
다양한 상황에서 제공되는 출력의 차이입니다.
달리다 bash -c 'set -x; echo "hello"'
보면 보이는데...
+ echo hello
hello
달리다 bash -c '(set -x; echo "hello")'
보면 보이는데...
+ echo hello
hello
달리다 bash -c 'hi=$(set -x; echo "hello")'
보면 보이는데...
++ echo hello
+
마지막 사례에 왜 이중이 있는지 아는 사람이 있나요?
답변1
인용하다배쉬 매뉴얼을 위한 set -x
:
확장 후 및 실행 전의 인수 또는 관련 단어 목록과 함께 간단한 명령,
for
명령,case
명령 , 명령 및 산술 명령의 추적을 인쇄합니다.select
변수for
의 값이PS4
확장되고 결과 값이 명령 및 확장된 인수 앞에 인쇄됩니다.
PS4
예~로 서술 된:
이 매개변수의 값은 다음과 같이 확장됩니다.PS1
-x
확장된 값은 옵션이 설정될 때 명령줄을 에코하기 전에 인쇄되는 프롬프트입니다(참조:내장 컬렉션). 확장된 값의 첫 번째 문자는 여러 수준의 간접 참조를 나타내기 위해 필요한 만큼 복사됩니다. 기본값은 "+
"입니다.
반복되는 +
기호는 간접 참조 수준을 나타냅니다.
set -x; echo "hello"
단일 수준에서 작동합니다.hi=$(set -x; echo "hello")
2개로 실행: 교체에 사용되는 서브셸 환경은 두 번째 수준입니다.
set -x
간접 참조 수준은 명령이 실행되는 수준에서 계산 되지 않으며 "기본" 셸에서 계산됩니다.
이 문자 복제는 Bash에만 적용됩니다. 다른 쉘에서는 이러한 방식으로 쉘 깊이를 표시하지 않습니다.