#!/bin/bash
# source: https://stackoverflow.com/a/52678279/6334421

# A variable can be assigned the nameref attribute using the -n option
# to the declare or local builtin commands (see Bash Builtins) to create
# a nameref, or a reference to another variable. This allows variables to
# be manipulated indirectly.

function text_input {
  # If variable of name $1 is zero, then ask user for input.
  # Only one line user input is allowed.
  # User input must not be empty.
  #
  # $1: variable name to store input to
  # $2: text to display (e.g. "Enter hostname:")
  if [ -z "$1" ] || [ -z "$2" ]; then
    echo "text_input requires two args!";
    return 1
  fi

  local -n ptr=$1 || return $?
  if [ -z "$ptr" ]; then
    echo "$2"
    read -r ptr || return $?
  fi

  # check string length to be greater than zero!
  if [ "${#ptr}" -lt 1 ]; then
    echo "text_input must not be empty!";
    return 1;
  fi
}

text_input foo "Enter something funny:"
echo "Input: $foo"

bar=""
text_input bar "Enter something even funnier:"
echo "Input: $bar"
