#!/bin/bash

if [ "a$1" == "a-h" ] || [ "a$1" == "a--help" ]; then
  cat <<EOF
Usage: $0

Reads a single key from stdin and parses some key codes such as arrow keys and enter.
EOF
fi
read -rsN1 key

read -rsN1 -t 0.0001 k1
read -rsN1 -t 0.0001 k2
read -rsN1 -t 0.0001 k3
key+="${k1}${k2}${k3}"

case "$key" in
$'\e[A' | $'\e0A')
  echo up
  ;;
$'\e[D' | $'\e0D')
  echo left
  ;;
$'\e[B' | $'\e0B')
  echo down
  ;;
$'\e[C' | $'\e0C')
  echo right
  ;;
$'\n')
  echo enter
  ;;
*)
  echo "$key"
  ;;
esac