인수에 따라 사용자 입력 프롬프트를 변경하는 함수를 만들고 싶습니다.
my_fucntion
db_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)