#!/usr/bin/env bash cd "${0%/*}" || exit 1 . ../run-tests testArgs() { local args # shellcheck disable=SC2031 args=$(declare -p MO_FUNCTION_ARGS) # The output from declare -p could look like these # declare -a MO_FUNCTION_ARGS=([0]="one") # declare -ax MO_FUNCTION_ARGS='([0]="one")' # Trim leading declare statement and variable name args="${args#*=}" # If there are any quotes, remove them. The function arguments will always # be an array. if [[ "${args:0:1}" == "'" ]]; then args=${args#\'} args=${args%\'} fi echo -n "$args" } template() { cat <<EOF No args: {{testArgs}} - done One arg: {{testArgs 'one'}} - done Multiple arguments: {{testArgs 'aa' 'bb' 'cc' 'x' "" '!' '{[_.|' }} - done Evil: {{testArgs bla; cat /etc/issue}} - done EOF } expected() { cat <<EOF No args: () - done One arg: ([0]="one") - done Multiple arguments: ([0]="aa" [1]="bb" [2]="cc" [3]="x" [4]="" [5]="!" [6]="{[_.|") - done Evil: ([0]="" [1]="" [2]="") - done EOF } runTest