(x=100)과 { x=100;}의 차이점은 무엇입니까?

(x=100)과 { x=100;}의 차이점은 무엇입니까?

누군가 다음 진술을 설명할 수 있습니까?

$x=50

$ (x=100) # 이 코드는 서브쉘에서만 실행됩니다. 하위 쉘 실행이 완료되면 x 값은 원래 값인 50으로 돌아갑니다.

$ 에코 $x

미화 50달러


$x=50

${x=100; #여기서 x 값은 완전히 변경되고 x의 현재 쉘 값에 영향을 미치며 50에서 100으로 변경됩니다.

$ 에코 $x

100 달러


어떻게 이런 일이 일어나는지, 누가 설명해 주실 수 있나요?

답변1

~에서남자 난교:

(목록) list는 서브셸 환경에서 실행됩니다(아래 명령 실행 환경 참조). 쉘 환경에 영향을 미치는 변수 할당 및 내장 명령은 명령이 완료된 후에 더 이상 유효하지 않습니다.

별도의 환경에서 호출되는 명령은 쉘의 실행 환경에 영향을 미칠 수 없습니다.

{ 목록; }list는 현재 쉘 환경에서만 실행됩니다.

답변2

Bourne과 같은 셸에서는 ( ... )코드가 하위 셸에서 실행되므로 변수의 모든 변경 사항은 해당 하위 셸에 국한되며 상위 셸에는 표시되지 않습니다. 대신 { ... }코드가 현재 셸에서 실행되어 해당 변수에 영향을 줍니다.

답변3

당신이 말했듯이 : ( )서브 쉘이 생성됩니다. { ;}아니요. 이것이 결과가 다른 이유입니다. { ;}어쨌든 단일 명령에는 의미가 없습니다. 그룹화 기능입니다.

관련 정보