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