ソーススクリプトの機能動作

ソーススクリプトの機能動作

script1.sh と script2.sh の両方の名前は同じですが、定義が異なる関数を含む場合、その関数が script1.sh で実行されると、script2.sh は script1.sh から始まります。どの関数が呼び出されますか?

私はこのケースをシミュレートしようとしています。 script1.shで関数を実行すると、script1.shで定義された関数のみが使用されます。しかし、この動作はすべての状況で一貫していますか?

script1.sh

#!/bin/bash
source script2.sh
execute() {
    echo "Hello"
}
execute

script2.sh

#!/bin/bash
execute() {
   echo "Something"
}

ベストアンサー1

この場合、関数を変数として扱うことができます。つまり、関数に割り当てた最後の値を持つことになります。以下の場合があります。

var=foo
var=bar
var=baz
echo "$var"

上記の場合、変数に値が割り当てられるたびに古い値が上書きされるため、echo "$var"これが印刷されることは明らかです。baz機能は同じ方法で動作します。同じ名前の関数が複数回定義されると、最後の定義のみが関連付けられ、他の定義は失われます。

購入しても変わるわけではありません。ファイルから関数をインポートし、同じ名前で新しい関数をオーバーライドすると、新しい関数のみが機能します。逆に、スクリプトで関数を定義し、同じ名前の関数を使用してファイルをインポートする場合は、インポートされたファイルのみが有効です。

はい。完全に一貫性があり、作業順序に従って実際に使用されるものが定義されます。

おすすめ記事