![다른 매개변수가 필요한 함수 내에서 매개변수가 있는 함수 호출](https://linux55.com/image/155892/%EB%8B%A4%EB%A5%B8%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EA%B0%80%20%ED%95%84%EC%9A%94%ED%95%9C%20%ED%95%A8%EC%88%98%20%EB%82%B4%EC%97%90%EC%84%9C%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EA%B0%80%20%EC%9E%88%EB%8A%94%20%ED%95%A8%EC%88%98%20%ED%98%B8%EC%B6%9C.png)
말로 어떻게 표현해야 할지 모르겠어서 최선을 다해 설명하겠습니다. 기능이 있어요
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가 지적했듯이 이 특별한 예는 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이 제안한 대로 실제로 두 번째 매개변수를 제공하려면 다음 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달러" elif [[“$1”=“-k”]] 그 다음에 삭제 이메일 보내기"2달러" 기타 echo "유효한 입력이 제공되지 않았습니다." 필리핀 제도 }그래서두번째(가장 바깥쪽) 스크립트에 대한 인수는 두 번째 인수가 되고
main()
, 이어서 가장 안쪽 함수에 대한 (유일한) 인수가 됩니다.
나는로 바뀌었다$(function_name)
function_name
왜냐하면 당신이 그것이 효과가 없다고 말했기 때문입니다.$(function_name)