"( set -o posix ; set ) | less "는 무엇을 하고 있나요? [복사]

"( set -o posix ; set ) | less "는 무엇을 하고 있나요? [복사]

모든 쉘 변수를 나열하는 명령을 검색하는 동안 모든 환경 변수를 나열하는 명령이 있다는 것을 깨달았지만 어떻게 든 내가 모르는 이유로 모든 쉘 변수를 나열한 사람은 없습니다.

그런데 여기에 모든 변수, 쉘, 환경 변수를 표시하는 방법에 대한 답변을 주신 분이 계십니다.

( set -o posix ; set ) | less

그는 실제로 이 표현이 무엇을 하는지 일반 사람들에게 설명하지 않으며, 나의 단편적인 이해로는 그 뒤에 숨은 아이디어를 파악하기에 충분하지 않습니다.

내가 아는 것은 다음과 같습니다.

  • (명령 1, 명령 2)이로 인해 명령이 셸의 하위 프로세스 내에서 실행됩니다.
  • 놓다변수를 선언하는 몇 가지 방법이지만 그것이 무엇인지는 모르겠습니다.-o posix두 번째 의미와 이유놓다지속적으로 실행

  • 명령 | 덜그것은 문제가 되지 않습니다. 비록 내가 그것을 이해한다고 해도 그것은 출력에 대한 더 많은 제어를 위한 호출기입니다.

답변1

set모든 쉘 변수를 표시합니다(내보냈는지 여부). Bash에서 set -o posix쉘을 다음으로 설정하십시오.POSIX 호환 모드. (다른 쉘에도 유사한 기능에 대한 유사한 구문이 있는지는 모르겠지만 여기서는 Bash를 사용한다고 가정합니다.)

이 경우의 차이점은 일반적으로 Bash는 set셸 함수도 표시하지만 POSIX 모드에서는 set변수만 표시되고 출력 형식이 약간 변경된다는 것입니다.

  1. 옵션 없이 set 내장 함수를 호출하면 쉘 함수 이름과 정의가 표시되지 않습니다.
  2. 옵션 없이 set 내장 함수를 호출하면 결과에 인쇄할 수 없는 문자가 포함되어 있어도 쉘 메타 문자가 포함되어 있지 않으면 따옴표가 없는 변수 값을 표시합니다.

Bash에는 다음도 있습니다.declare내장모든 숨겨진 변수 또는 Bash 관련 변수를 표시하는 데 사용할 수 있는 플래그: declare -p xxBash가 입력으로 사용할 수 있는 형식으로 변수를 표시합니다. 모든 변수를 표시하고 기능을 표시하는 데 사용할 수 있습니다.xxdeclare -pdeclare -f

답변2

기본적으로 두 가지 일이 발생합니다. set현재 쉘 옵션을 망칠 수 없도록 서브쉘에서 명령이 호출되고, 모든 변수가 나열되기 전에 서브쉘이 POSIX 모드로 설정됩니다. 매뉴얼 인용 :

posix는 표준(posix 모드)과 일치하도록 POSIX 표준으로 기본 설정되는 bash 동작을 변경합니다. posix 모드가 bash의 동작에 어떻게 영향을 미치는지 자세히 설명하는 아래 문서 참조를 참조하세요.

즉, bashPOSIX 모드의 동작은 훨씬 더 유사합니다 sh.

Option-less 의 경우 set매뉴얼에도 나와 있으며 실제로 다음과 같이 나와 있습니다.이유POSIX 모드가 필요한 이유:

set [+abefhkmnptuvxBCEHPT] [+o 옵션 이름] [arg ...] 옵션이 없으면 각 쉘 변수의 이름과 값은 현재 설정된 변수를 설정하거나 재설정하기 위한 입력으로 재사용할 수 있는 형식으로 표시됩니다. . .posix 모드에서는 쉘 변수만 나열됩니다.

bash... 일반 ​​모드에서 수행되는 변수 및 함수 정의와 반대입니다 .

바라보다이것POSIX 모드에 대한 추가 정보.

관련 정보