이 스크립트는 "bash somescript"와 "bash -c 'source somescript'" 사이의 차이점을 감지할 수 있습니까?

이 스크립트는 "bash somescript"와 "bash -c 'source somescript'" 사이의 차이점을 감지할 수 있습니까?

(이전) 제목을 보면 "중복"으로 표시될 가능성이 높습니다.

test.sh매개변수를 사용하지 않는 스크립트( )가 있습니다. 나는 그것을 두 가지 방식으로 부른다:

bash "test.sh"
# BASH_ARGC=()
# BASH_ARGV=()

bash -c "source test.sh"
# BASH_ARGC=([0]="1" [1]="0")
# BASH_ARGV=([0]="test.sh")
# BASH_EXECUTION_STRING='source test.sh'

내가 찾은 유일한 차이점은 세 가지 bash 변수입니다. test.sh는 어떤 매개변수도 허용하지 않기 때문에 이러한 차이점은 부적절하다고 생각합니다.

다른 차이점이 있나요?

즉, test.sh한 호출 방법에서는 작동하지만 다른 호출 방법에서는 작동하지 않는 ( ) 것은 무엇입니까?

업데이트 1

@JdeBP, @스티븐 키트

답변해주셔서 감사합니다. 하지만 제 요점은 detection차이점이 아니라 일반 프로그래머에게 영향을 줄 수 있는 실제 차이점에 관한 것입니다.

$0 차이는 일반 프로그래머가 거의 "사용"하지 않습니다.

답변1

bash -c "source test.sh"

별도의 쉘과 결합하여 실행 test.sh하는 다소 특이한 방법입니다 .source

$0이는 다음을 보면 알 수 있습니다 .

if [ "${0##*/}" = "test.sh" ]; then
    # being run directly
else
    # being sourced
fi

$0스크립트를 작성하면 반영되지 않기 때문입니다 .source

test.sh매개변수 처리를 제외하면 두 매개변수의 관점에서 실질적인 차이가 있어서는 안 됩니다.

bash test.sh

그리고

bash -c "source test.sh"

그러나 후자 형식은 현재 디렉터리에 있는 a를 test.sh선호 합니다.PATHtest.sh

바라보다소싱("." 또는 "source")과 bash에서 파일 실행의 차이점은 무엇입니까?현재 셸에서 스크립트를 가져올 때의 차이점에 대한 세부정보입니다.

관련 정보