(이전) 제목을 보면 "중복"으로 표시될 가능성이 높습니다.
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
선호 합니다.PATH
test.sh
바라보다소싱("." 또는 "source")과 bash에서 파일 실행의 차이점은 무엇입니까?현재 셸에서 스크립트를 가져올 때의 차이점에 대한 세부정보입니다.