function select -a header outFile message error choices loop if [ -z "$loop" ] set loop true end while true set -l items echo "$choices" | while read choice set -a items "$choice" end set -l count (count $items) set -l padding (math (string length "$count") + 1) if [ "$count" -gt 0 ] echo "$message" printf "%"$padding"s %s\n" "" "$header" for i in (seq "$count") printf "%"$padding"s %s\n" "$i" "$items[$i]" end read -lP "Your choice: " choice or exit 1 if math "0+$choice" &>/dev/null if [ "$choice" -ge 1 ] && [ "$choice" -le "$count" ] echo "$items[$choice]" >$outFile return end end echo "The specified \"$choice\" is invalid!" else echo "$error" >&2 exit end if not "$loop" break end end return 1 end