BASH: 매개변수에 따라 함수 프롬프트를 변경할 수 있나요?

BASH: 매개변수에 따라 함수 프롬프트를 변경할 수 있나요?

인수에 따라 사용자 입력 프롬프트를 변경하는 함수를 만들고 싶습니다.

my_fucntiondb_host사용자에게 입력을 요청한 후 매개변수 1개를 사용합니다.

function provide_host () {
    echo "Enter NAME OR IP OF ${function_param1} DATBASE HOST: "
    read global function_param1_db_host
}

그래서 내가 함수를 호출하면

function provide_host (primary)

다음과 같이 프롬프트되어야 합니다.

echo "Enter NAME OR IP OF PRIMARY DATBASE HOST: "

하지만 내가 사용한다면

function provide_host (secondary)

그것은 묻는다

 "Enter NAME OR IP OF SECONDARY DATBASE HOST: "

내 생각에는 이를 위해 명령문을 사용해야 한다고 생각 if하지만 함수 매개변수를 변수로 사용하여 함수 내부에서 사용자에게 메시지를 표시할 수 있는지 확실하지 않습니다.

답변1

$1다음을 사용하여 첫 번째 매개변수를 얻을 수 있습니다 .

function provide_host () {
    echo "Enter NAME OR IP OF $1 DATBASE HOST: "
    read global function_param1_db_host
}

또는 대문자로 변환하십시오.

function provide_host () {
    echo "Enter NAME OR IP OF ${1^^} DATBASE HOST: "
    read global function_param1_db_host
}

그런 다음 다음을 사용하여 함수를 호출합니다.

provide_host primary
provide_host secondary

그러나 나는 약간 다르게 한다. 전역 변수를 설정하는 대신 stderr에 프롬프트를 표시하고 stdout의 함수에서 IP를 반환합니다.

function provide_host() {
    read -p "Enter NAME OR IP OF ${1^^} DATABASE HOST: " host >&2
    printf "%s" "$host"
}

primary_db_host=$(provide_host primary)
secondary_db_host=$(provide_host secondary)

관련 정보