쉘 스크립트의 "내보내기" 변수

쉘 스크립트의 "내보내기" 변수

두 개의 스크립트가 있고 ( ) 명령을 사용하여 실행 합니다 first.sh.second.shfirst.shsecond.sh.source

이 스크립트가 막혔어요

First.sh

 value="myvalue"
 export value

 oldvalue="othervalue"
 export value

값을 초기화하고 내보낸 후 이전 값을 초기화 하고 다시 내보냈 value지만 oldvalue.othervaluesecond.sholdvaluefirst.sh

답변1

다음을 사용하여 두 번째 "스크립트"를 .얻으면달리기별도의 스크립트입니다.

예를 들어 다음 두 스크립트를 고려해보세요. 그 중 하나는달리다또 다른:

$ ls
script1*    script2*

$ cat script1
#!/bin/bash

export value="myvalue"
oldvalue="othervalue"

# Here script1 is running the second script (not sourcing it)
./script2

$ cat script2
#!/bin/bash

echo "value: ${value}"
echo "oldvalue: ${oldvalue}"

세트 script1및 내보내기 및 세트는 내보내기가 아닌 value별도의 프로세스로 oldvalue실행됩니다 . 이 두 값을 차례로 인쇄해 보세요. 출력은 다음과 같습니다.script2script2

$ ./script1
value: myvalue
oldvalue:

보시다시피, 이 경우 두 변수 가시성에 대한 기대는 정확합니다. oldvalue에서 파생되지 않았 으므로 script1해당 값은 에서 정의되지 않습니다 script2.

답변2

대답은 실제로 두 개의 스크립트가 있는 것이 아니라 include다른 프로그래밍 언어처럼 두 개의 파일에 하나의 스크립트가 분산되어 있다는 것입니다.

따라서 변수는 두 스크립트 부분 사이의 환경을 통해 전달되지 않으며 동일한 셸 프로세스의 일부이기 때문에 사용할 수 있습니다.

이것은 당신이 실행하기 때문에 작동합니다

. first.sh

변수에 접근하기 전에 그래서 이것은 작동합니다second.sh

. first.sh
echo "$oldvalue"

하지만 이건 안 되지

echo "$oldvalue"
. first.sh

관련 정보