[lang-ref] ( example_ask_yes_no ) ( bash )
@test "example ask yes no" {
ask_yes_no() {
local prompt=${1:-'Proceed? [Y/n]: '}
local answer
on_sigint() { # Ctrl+C
printf '\nCancelled.\n' >&2
return 130
}
while true; do
trap on_sigint INT
printf '%s' "$prompt" >&2
if ! IFS= read -r answer; then # Ctrl-D
printf '\nCancelled.\n' >&2
trap - INT
return 1
fi
trap - INT
answer="${answer,,}"
if [[ -z "$answer" || "$answer" == "y" || "$answer" == "yes" ]]; then
return 0
fi
if [[ "$answer" == "n" || "$answer" == "no" ]]; then
return 1
fi
printf "\nPlease respond with 'y' or 'n'\n" >&2
done
}
run ask_yes_no <<< $'y\n'
[ "${status}" -eq 0 ]
run ask_yes_no <<< $'n\n'
[ "${status}" -eq 1 ]
}