스크립트에서 변수에 액세스할 수 있게 만드는 방법 [닫기]

스크립트에서 변수에 액세스할 수 있게 만드는 방법 [닫기]

Ubuntu 16.04에서는 두 개의 다른 스크립트(스크립트 2 및 스크립트 3)를 자체적으로 실행하는 하나의 스크립트(스크립트 1)를 실행했습니다.

${x}스크립트 3에는 스크립트 2( )에 선언된 변수의 변수 대체( )가 포함되어 있습니다 x=y.

물론 스크립트 3을 실행하기 전에 source스크립트 2를 실행하여 향후 스크립트 3이나 다른 곳에서 변수 대체를 허용하도록 합니다.


문제는 스크립트 1을 통해 스크립트 3을 실행할 때 변수 대체가 실패하고 결과가 완벽하지 않지만 수동 실행에서는 성공한다는 것입니다.


스크립트 1을 통해 스크립트 3을 실행할 때 변수 대체가 실패하지만 수동으로 실행하면 성공하는 이유는 무엇이며, 이러한 일이 실제로 발생하는지 어떻게 확인할 수 있습니까?

스크립트 2가 충분 하지 sourcing않다면 모르겠습니다.

답변1

이는 변수 범위 지정 문제이며 스크립트가 명령줄에서 수동으로 실행되는지 아니면 다른 스크립트에 의해 실행되는지와 전혀 관련이 없습니다.

환경으로 내보내지지 않은 셸 변수는 하위 프로세스(하위 셸 포함)에 표시되지 않습니다.

script2내부적으로 소싱하는 경우 의 범위 내에서 발생하므로 에 정의된 모든 변수가 표시 script3됩니다 . 내부 와 내부 모두 소스를 사용하는 경우 결과는 거의 동일합니다 (그러나 이 경우 모든 것은 의 범위 내에서 발생합니다 ).script3script2script3script2script3script1script1

그러나 script2내부적으로 소싱 하는 경우 script1다음을 수행하십시오(아니요소스) script3from 의 script1경우 script3정의되거나 변경된 변수만 표시됩니다( script2내보낸 경우).

변수가 내보내지는 한 언제 어디서 변수를 내보내는지는 중요하지 않습니다.앞으로 script3처형되다. 변수는 실행이 시작된 상위 셸(또는 해당 .profile/.bashrc/etc) script1에서 또는 심지어 해당 셸에서 내보낼 수 있습니다 .script2script1

관련 정보