명령 앞의 변수 할당이 무시되는 이유는 무엇입니까?

명령 앞의 변수 할당이 무시되는 이유는 무엇입니까?

bash 4.1 맨페이지에는 다음과 같은 내용이 나와 있습니다.(강조 추가)...

간단한 명령

간단한 명령은일련의 선택적 변수 할당과 그 뒤에 공백으로 구분된 단어리디렉션 및 제어 운영자에 의해 종료됩니다. 첫번째단어실행할 명령을 지정하고 인수 0으로 전달됩니다. 나머지 단어는 호출된 명령에 인수로 전달됩니다.

내 시스템의 버전 ​​확인(쉘쇼크에 대해서는 패치되지 않음)...

#  bash --version
GNU bash, version 4.1.0(1)-release (i686-pc-linux-gnu) ...

그러나 세미콜론 없이 선행 변수 할당은 해당 명령 호출의 수명 동안만 환경 변수 값을 지역화하는 방법으로 간주되지만...

#  x=123 echo $x; unset x; echo $x
bash: x: unbound variable
#  x=123; echo $x; unset x; echo $x
123
bash: x: unbound variable
#  x=123; echo $x | tr '1' 'a'; unset x; echo $x
a23
bash: x: unbound variable
#  x=123 echo $x | tr '1' 'a'; unset x; echo $x
bash: x: unbound variable
bash: x: unbound variable
#  x="123" echo "$x" | tr '1' 'a'; unset x; echo $x
bash: x: unbound variable
bash: x: unbound variable
#  x="123"; echo "$x" | tr '1' 'a'; unset x; echo $x
a23
bash: x: unbound variable

해결책
이 답변은 다른 질문에 대한 답변입니다.명령은 상위 환경 변수를 의도적으로 사용해야 하지만 echo그렇지 않은 것으로 보입니다. 하지만 do와 같은 쉘 호출은 bash -c...

x=123 bash -c 'echo $x'; unset x; echo $x
123
bash: x: unbound variable

자원

답변1

이 줄

x=123 echo $x

다음 순서로 평가됩니다.

  1. $xx의 값으로 확장됩니다.현재의껍데기.
  2. x실행할 명령 환경의 값은 123으로 설정되어 있습니다.
  3. 확장된 명령줄에서 명령을 검색하여 echo찾습니다.
  4. echox123으로 설정된 환경에서 실행되며 1단계의 $1값으로 설정됩니다 .x
  5. echo표준 출력으로 출력 $1하지만 그렇지 않으면 해당 환경의 다른 값을 무시합니다.

$x인수는 x명령 앞에 오는 와 별개 라는 점에 유의하세요 .

관련 정보