![BASH: 매개변수에 따라 함수 프롬프트를 변경할 수 있나요?](https://linux55.com/image/206548/BASH%3A%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EC%97%90%20%EB%94%B0%EB%9D%BC%20%ED%95%A8%EC%88%98%20%ED%94%84%EB%A1%AC%ED%94%84%ED%8A%B8%EB%A5%BC%20%EB%B3%80%EA%B2%BD%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
인수에 따라 사용자 입력 프롬프트를 변경하는 함수를 만들고 싶습니다.
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)