다른 매개변수가 필요한 함수 내에서 매개변수가 있는 함수 호출

다른 매개변수가 필요한 함수 내에서 매개변수가 있는 함수 호출

말로 어떻게 표현해야 할지 모르겠어서 최선을 다해 설명하겠습니다. 기능이 있어요

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
}

이 경우 $arg2in은 다양한 명령 에 내부적으로 main()사용됩니다 .$1send*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)

관련 정보