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
다음 순서로 평가됩니다.
$x
x
값이 확장됨현재의껍데기.x
실행할 명령어 환경의 값을 123으로 설정- 확장 명령줄에서 명령을 검색하여
echo
찾습니다. echo
x
123으로 설정된 환경에서 실행하고 1단계에서 설정한 값$1
으로 설정합니다 .x
echo
$1
표준 출력으로 출력 하지만 해당 환경의 다른 값은 무시합니다.
$x
인수는 x
명령 앞의 인수와 별개 라는 점에 유의하세요 .