누군가 다음 진술을 설명할 수 있습니까?
$x=50
$ (x=100) # 이 코드는 서브쉘에서만 실행됩니다. 하위 쉘 실행이 완료되면 x 값은 원래 값인 50으로 돌아갑니다.
$ 에코 $x
미화 50달러
$x=50
${x=100; #여기서 x 값은 완전히 변경되고 x의 현재 쉘 값에 영향을 미치며 50에서 100으로 변경됩니다.
$ 에코 $x
100 달러
어떻게 이런 일이 일어나는지, 누가 설명해 주실 수 있나요?
답변1
~에서남자 난교:
(목록) list는 서브셸 환경에서 실행됩니다(아래 명령 실행 환경 참조). 쉘 환경에 영향을 미치는 변수 할당 및 내장 명령은 명령이 완료된 후에 더 이상 유효하지 않습니다.
별도의 환경에서 호출되는 명령은 쉘의 실행 환경에 영향을 미칠 수 없습니다.
{ 목록; }list는 현재 쉘 환경에서만 실행됩니다.
답변2
Bourne과 같은 셸에서는 ( ... )
코드가 하위 셸에서 실행되므로 변수의 모든 변경 사항은 해당 하위 셸에 국한되며 상위 셸에는 표시되지 않습니다. 대신 { ... }
코드가 현재 셸에서 실행되어 해당 변수에 영향을 줍니다.
답변3
당신이 말했듯이 : ( )
서브 쉘이 생성됩니다. { ;}
아니요. 이것이 결과가 다른 이유입니다. { ;}
어쨌든 단일 명령에는 의미가 없습니다. 그룹화 기능입니다.