`env foo=bar echo $foo`는 아무것도 인쇄하지 않습니다.

`env foo=bar echo $foo`는 아무것도 인쇄하지 않습니다.

마음이 복잡해지는 것 같아요. 나는 희망

env foo=bar echo $foo

...prints bar하지만 빈 줄이 나타납니다. 와트.

bash 구문을 사용하면 같은 일이 발생합니다.

foo=bar echo $foo

답변1

비슷한 질문에 답변되었습니다최근의: 기호는 해당 줄에서 정의되기 전에 해당 줄에서 평가되므로 줄을 구분하려면 기호의 정의와 사용을 분리해야 합니다.

설명에 따라 다음과 같이 할 수 있습니다.

foo=bar bash -c 'echo $foo'

먼저 값을 할당 foo하고 이를 인쇄 가능한 환경 변수로 새 프로세스에 전달합니다.

이에 대한 자세한 내용은 POSIX Shell Command Language에서 읽을 수 있습니다.토큰 인식.

다음에서 팔로우@mikeserv논평:

  • POSIX는 완전한 답변을 제공할 만큼 명확하지 않습니다.
  • 인용된 부분의 시작 부분에 다음과 같이 나와 있습니다.

    쉘은 파일의 입력을 행으로, 대화형 쉘의 터미널에서, 또는 sh -c 또는 system()의 문자열로 읽어야 합니다.

  • 마지막으로, 그것은 말한다

    토큰이 구분되면 Shell Grammar의 문법 요구 사항에 따라 분류됩니다.

  • 그러나 POSIX는 말하지 않습니다분명히구문을 처리하기 전에 전체 줄이 토큰화됩니다.
  • 이 경우 우리는 기존 관행에 의존합니다. 쉘은 작성된 표준과 모순되는 것이 없기 때문에 준수하지만 표준을 사용하여 모든 상황에서 동작을 예측할 수는 없습니다.
  • 물론 별칭의 동작에도 동일한 설명이 적용됩니다(이것이 제가 별칭이라고 부르는 이유입니다).비슷한질문).

관련 정보