[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 ]
}