명령 전의 변수 할당이 무시되는 이유는 무엇입니까? [복사]

명령 전의 변수 할당이 무시되는 이유는 무엇입니까? [복사]

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사실은 그렇지 않습니다. 하지만 쉘 호출은 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명령 앞의 인수와 별개 라는 점에 유의하세요 .

관련 정보