(前)タイトルを見ると「重複」と表示される可能性が高いです。
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
好みます。PATH
test.sh
バラよりソース("."または"source")とbashでのファイル実行の違いは何ですか?現在のシェルからスクリプトをインポートする際の違いの詳細。