source

환경변수를 인쇄/반향하는 방법

itover 2023. 4. 22. 09:22
반응형

환경변수를 인쇄/반향하는 방법

설정 중인 환경변수를 인쇄하려면 어떻게 해야 합니까?

NAME=sam echo "$NAME" # empty

여기서 보실 수 있는 것은eval그건 효과가 있다.이 길인가요?

NAME=sam eval 'echo $NAME' # => sam

이러한 명령어는 다음과 같이 서로 다른 명령어로 사용해야 합니다.

NAME=sam; echo "$NAME"
NAME=sam && echo "$NAME"

확장$NAME빈 문자열은 실행 전에 셸에 의해 실행됩니다.echo그래서 그 당시에NAME변수가 에 전달됩니다.echo(null 문자열로) 이미 확장되었습니다.

하나의 명령으로 동일한 결과를 얻으려면:

NAME=sam printenv NAME

기존 답변을 중요한 설명과 함께 정리하려면 다음 절차를 따릅니다.

앞에서 설명한 바와 같이NAME=sam echo "$NAME"그것이다$NAME할당 전에 현재 에 의해 확장됩니다.NAME=sam유효하게 됩니다.

(효과적이지 않은) 솔루션 시도의 원래 의미를 유지하는 솔루션NAME=sam echo "$NAME"):

둘 중 하나를 사용하다eval[1] (질문 자체에서와 같이) 또는printenv(Aaron McDaid가 Heemayl의 답변에 추가) 또는bash -c(LJm Dullaart의 답변에서), 효율성 내림차순으로:

NAME=sam eval 'echo "$NAME"'  # use `eval` only if you fully control the command string
NAME=sam printenv NAME
NAME=sam bash -c 'echo "$NAME"'

printenv는 POSIX 유틸리티는 아니지만 Linux와 MacOS/BSD 모두에서 사용할 수 있습니다.

이 스타일의 호출(<var>=<name> cmd ...)는, 정의하기 위한 것입니다.NAME:

  • 환경변수로서
  • 명령어 호출되는 명령어에 대해서만 정의됩니다.

즉, 다음과 같습니다.NAME호출되는 명령어(자녀 프로세스)에만 존재하며 현재 셸에는 영향을 주지 않습니다(이름 있는 변수가 없는 경우).NAME이전에도 존재했지만, 그 이후에는 존재하지 않을 것이다;기존재NAME변수는 변경되지 않습니다).

POSIX는 명령어 검색 및 실행 장에서 이러한 종류의 호출 규칙을 정의합니다.


다음 솔루션은 매우 다르게 동작합니다(Heemayl의 답변과 인용).

NAME=sam; echo "$NAME"
NAME=sam && echo "$NAME"

같은 출력이 생성되지만 대신 다음과 같이 정의됩니다.

  • 환경변수가 아닌 셸변수(전용
    • 한다면echo환경 변수에 의존하는 명령어입니다.NAME정의되지 않습니다(또는 이전과 다르게 정의될 수 있습니다.
  • 명령어 이후에도 계속됩니다.

모든 환경변수는 셸변수로서도 공개되지만 그 반대는 아닙니다.셸변수는 현재 셸과 그 서브셸에만 표시되며 외부유틸리티나 (소싱되지 않은) 스크립트 등의 하위 프로세스에는 표시되지 않습니다(셸변수가 환경변수로 지정되어 있지 않은 경우).export ★★★★★★★★★★★★★★★★★」declare -x를 참조해 주세요.


말하면 [1] 밀] [ [ [ [bashPOSIX」와 )zsh : : ★★eval는 특수 셸을 내장하고 있습니다.NAME=sam.$NAME명령어가 종료된 후에도 범위 내에 남습니다만, 실제로는 그렇지 않습니다.
you만을 하면 행행 however however however however howeverbashPOSIX 호환성 모드에서는 호환성이 있습니다.
dash ★★★★★★★★★★★★★★★★★」ksh는 항상 준거하고 있습니다.
정확한 규칙은 복잡하며 일부 측면은 구현에 따라 결정됩니다. 다시 "명령어 검색실행"을 참조하십시오.
또, 통상의 면책 조항이 적용됩니다.완전히 제어하거나 암묵적으로 신뢰하는 입력에만 사용하십시오.

이것도 세미콜론으로 작동한다.

NAME=sam; echo $NAME

구문

variable=value command

는 특정 프로세스의 환경변수를 설정하는 데 자주 사용됩니다.그러나 어떤 공정이 어떤 변수를 얻고 누가 해석하는지 이해해야 합니다.예를 들어, 2개의 셸을 사용합니다.

a=5
# variable expansion by the current shell:
a=3 bash -c "echo $a"
# variable expansion by the second shell:
a=3 bash -c 'echo $a'

결과는 첫 번째 에코의 경우 5, 두 번째 에코의 경우 3이 됩니다.

Windows에서는, 이하고, Windows 의 「」, 「CLI」로할 수 .C:\Users\dir\env | more

env 명령어를 사용하면 시스템에 설정된 모든 환경변수를 표시할 수 있습니다.목록이 길기 때문에 읽기 쉽도록 출력을 더 많이 파이프에 연결합니다.

언급URL : https://stackoverflow.com/questions/40050793/how-to-print-echo-environment-variables

반응형