このスクリプトは、「bash somescript」と「bash -c 'source somescript'」の違いを検出できますか?

このスクリプトは、「bash somescript」と「bash -c 'source somescript'」の違いを検出できますか?

(前)タイトルを見ると「重複」と表示される可能性が高いです。

test.shパラメータを使用しないスクリプト()があります。私はそれを2つの方法で呼ぶ:

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'

私が見つけた唯一の違いは3つの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でのファイル実行の違いは何ですか?現在のシェルからスクリプトをインポートする際の違いの詳細。

おすすめ記事