次のようなbash関数を書いているとしましょう。
function.sh
usage () {echo "No arguments are needed";}
myfunction () {
if [[ $# -qt 0 ]] ;
then
usage
fi
echo "Hello World"
}
それからsource function.sh
私は。しかし、そこに定義された別のスクリプトもあり、usage()
その内容もわかります。
私は走って電話をmyfunction -myWorld
かけusage()
、何とか正しい番号で電話をかけました。
usage()
bashはどれを呼び出すのか、どうすればわかりますか?
答え1
あなたの質問への答えは現在Bash呼び出しです。最後に定義されたバージョン関数。
使用例の2つの修正バージョン:
function1.sh
usage () { echo "Usage from function1.sh - No arguments are needed"; }
myfunction1 () {
if [[ $# -gt 0 ]] ;
then
usage
fi
echo "Hello World"
}
function2.sh
usage () { echo "Usage from function2.sh - No arguments are needed"; }
myfunction2 () {
if [[ $# -gt 0 ]] ;
then
usage
fi
echo "Hello World"
}
その後実行
$ source function1.sh
$ source function2.sh
$ usage
出力を与える
Usage from function2.sh - No arguments are needed
スクリプトで次の点に注意してください。
-qt
でなければなりませ-gt
ん。usage()
- 周辺にいくつかのスペースがありません。echo
答え2
上記のポスターが私の質問に直接答えたので、正解である私を奪いたくありません。
それでも後続編を投稿したかったです。
関数をソーシングする代わりに、function.shを含むディレクトリをPATHに追加し、ファイル名をmyfunctionに変更しました。 myfunctionファイルの最後の行はですmyfunction $@
。