言葉でどのように表現すべきかわからないので、最善を尽くして説明します。機能があります。
main()
{
if [[ "$1" = "-f" ]]
then
($sendFirstEmail) "$1"
elif [[ "$1" = "-s" ]]
then
($sendSecondEmail) "$1"
elif [[ "$1" = "-k" ]]
then
($sendKillEmail) "$1"
else
echo "valid input not provided"
fi
}
main "$1"
私がすべきことは、最初に渡されたパラメータを受け入れるメイン関数内の他の関数に別のパラメータを渡すことです。 $sendFirstEmailなどは、渡された最初の引数を受け入れる別の関数の名前です。本質的にこれがスクリプトを呼び出す方法です。これは可能ですか?それとも私がやろうとしていることを達成するより良い方法はありますか?./sendEmail.sh -f [email protected]
答え1
以前と同じように位置引数を渡すことはできますが、main
サブシェルの外では渡すことはできません。
main()
{
if [[ "$1" == "-f" ]]
then
sendFirstEmail "$1"
elif [[ "$1" == "-s" ]]
then
sendSecondEmail "$1"
elif [[ "$1" == "-k" ]]
then
sendKillEmail "$1"
else
echo "valid input not provided"
fi
}
サブシェルの目的が何であるかわからないので削除しました。ただし、何らかの理由でサブシェルが必要な場合は、パラメータを入力してください。
( sendFirstEmail "$1" )
Kusalanandaが指摘したように、この特別な例は1つの構成ではなくcase
構成に適していますif
(参照:3.2.4.2 条件付き構成)
main()
{
case $1 in
-f) sendFirstEmail "$1";;
-s) sendSecondEmail "$1";;
-k) sendKillEmail "$1";;
*) echo "valid input not provided" >&2;;
esac
}
またはより良い方法はgetopts
main()
{
if getopts fsk opt; then
case $opt in
f) sendFirstEmail "$1";;
s) sendSecondEmail "$1";;
k) sendKillEmail "$1";;
*) echo "valid input not provided" >&2;;
esac
fi
}
Timが提案したように、実際に2番目のパラメータを提供するには、次のgetopts
optarg
関数を使用できます。
main()
{
if getopts f:s:k: opt; then
case $opt in
f) sendFirstEmail "$OPTARG";;
s) sendSecondEmail "$OPTARG";;
k) sendKillEmail "$OPTARG";;
*) echo "valid input not provided" >&2;;
esac
fi
}
この場合、main
次のように実行します。
main -f 'option to the -f argument'
答え2
2つのパラメータを基本関数に渡すことはできますか?
main()
{
arg1=$1
arg2=$2
if [[ "$arg1" = "-f" ]]
then
($sendFirstEmail "$arg2")
elif [[ "$arg1" = "-s" ]]
then
($sendSecondEmail "$arg2")
elif [[ "$arg1" = "-k" ]]
then
($sendKillEmail "$arg2")
else
echo "valid input not provided"
fi
}
この場合、$arg2
inはさまざまなコマンドで内部的にmain()
使用されます。$1
send*Email
答え3
他の人が言ったことを繰り返す危険があります。たとえば、スクリプトを次のように呼び出すと、次のように呼び出す必要があります。./sendEmail.sh -f [email protected]
主な「1ドル」「2ドル」
main()
そして次のように変更します。基本() { if[["$1"="-f"]] それから 最初のメールを送信「2ドル」 elif [[“$1”=“-s”]] それから 2番目のメールを送信「2ドル」 elif [[“$1”=“-k”]] それから 削除メールを送信「2ドル」 その他 echo "有効な入力が提供されていません。" フィリピン諸島 }だから第二(最も外側の)スクリプトの引数は2番目の引数になり
main()
、次に最も内側の関数の(唯一の)引数になります。
私に変わった$(function_name)
function_name
なぜなら、それはうまくいかないと言ったからです。$(function_name)