#!/usr/bin/zsh dec_into_perc () { dec="$1" # duplicating code, don't care if echo "$dec" | grep -qE '^(-?[0-9]+\.[0-9]+|-?[0-9]|\.[0-9]+)$'; then percent="$( echo "$dec * 100" | bc -l )" echo "${percent}%" else echo "Error: not a decimal number" >&2 exit 1 fi } perc_into_dec () { perc="$1" # duplicating code, don't care if echo "$perc" | grep -qE '^(-?[0-9]+\.[0-9]+%|-?[0-9]+%|\.[0-9]+%)$'; then dec="{$perc%?}" dec="$( echo "$dec / 100" | bc -l )" echo "$dec" else echo "Error: not a percent" >&2 exit 1 fi } echo "$1" | grep -qE '^(-?[0-9]+\.[0-9]+|-?[0-9]|\.[0-9]+|-?[0-9]+\.[0-9]+%|-?[0-9]+%|\.[0-9]+%)$' && len=${#1} && [[ "${1:len-1:1}" == "%" ]] && perc_into_dec "$1" || dec_into_perc "$1"