Skip to content

Instantly share code, notes, and snippets.

@sevenissimo
Last active June 26, 2022 13:05
Show Gist options
  • Select an option

  • Save sevenissimo/e81e898923720ba616ccba8a8541d7e8 to your computer and use it in GitHub Desktop.

Select an option

Save sevenissimo/e81e898923720ba616ccba8a8541d7e8 to your computer and use it in GitHub Desktop.
Bash mandatory and typed input by read overload
#!/bin/bash
function read {
declare -n var="${@: -1}"
case "$1" in
-Z) until [[ -n "$var" ]]; do
builtin read "${@:2}";
done ;;
-D) until [[ "$var" =~ ^[0-9]+$ ]]; do
builtin read "${@:2}";
done ;;
-R) until [[ "$var" =~ ^[0-9]+$ ]]; do
IFS='-' builtin read "${@:2}"
done ;;
*) builtin read "$@";;
esac
unset var
}
read -p "Please enter something: " opt && echo "opt=$opt"
read -Z -p "Do enter something: " str && echo "str=$str"
read -D -p "Do enter a number: " num && echo "num=$num"
read -R -p "Do enter a range: " n m && echo "range=[$n $m]"
read -D -p "Please enter 2 numbers: " n m && echo "[$n $m]"
#!/bin/bash
function read {
case "$1" in
-Z) RE='.+'; shift;;
-D) RE='^[0-9]+$'; shift;;
-R) RE='^[0-9]+$' IFS='-'; shift;;
esac
declare -n var="${@: -1}"
until
builtin read "$@"
[[ "$var" =~ $RE ]]
do continue
done
unset IFS # reset to default
}
read -p "Please enter something: " opt && echo "opt=$opt"
read -Z -p "Do enter something: " str && echo "str=$str"
read -D -p "Do enter a number: " num && echo "num=$num"
read -R -p "Do enter a range: " n m && echo "range=[$n $m]"
read -D -p "Please enter 2 numbers: " n m && echo "[$n $m]"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment