bash 스크립트에서 사용자에게 y/n 응답을 요구하는 경우가 있습니다. 필자는 종종이 스크립트를 단일 스크립트에서 여러 번 사용하기 때문에 사용자 입력이 Yes/No의 변형인지 확인한 다음이 대답을 "y"또는 "n"으로 정리하는 기능을 갖고 싶습니다. 이런 식으로 뭔가 :인수에서 명명 된 변수를 bash 함수로 변경하십시오.
yesno(){
temp=""
if [[ "$1" =~ ^([Yy](es|ES)?|[Nn][Oo]?)$ ]] ; then
temp=$(echo "$1" | tr '[:upper:]' '[:lower:]' | sed 's/es//g' | sed 's/no//g')
break
else
echo "$1 is not a valid answer."
fi
}
I는 다음과 같은 기능을 사용하고 싶습니다 :
while read -p "Do you want to do this? " confirm; do # Here the user types "YES"
yesno $confirm
done
if [[ $confirm == "y" ]]; then
[do something]
fi
을 기본적으로,이 때 있도록 $confirm
의 값을 첫 번째 인수의 값을 변경하려면 yesno
함수를 종료하면 $confirm
이 "y"또는 "n"중 하나입니다.
yesno
함수 내에서 set -- "$temp"
을 사용해 보았지만 제대로 작동하지 않습니다.
이것은 X-Y 질문입니다. 문제는 제안 된 솔루션에 관한 것이고 OP는 실제로 해결 방법을 사용하여 문제를 해결하려고합니다. 허용 된 대답은 바깥 범위에서''$ 1 ''을 변경하지 않기 때문에 다른 사람들이 검색 결과로 찾으면 혼동을 일으킬 수 있습니다. 아마도 실제/즉각적인 문제를보다 자세히 설명하기 위해 질문을 편집해야합니다 ? –
... 원래 제목을 기반으로 OP는'$ 1'의 내용에서 명명 된 변수 *의 값이 아니라'$ 1' 자체를 변경하는 방법을 알고 싶다고 생각했을 것입니다. –