Haben Sie Ihr Skript arrArg.sh
wie folgt aus:
#!/bin/bash
arg1="$1"
arg2=("${!2}")
arg3="$3"
arg4=("${!4}")
echo "arg1=$arg1"
echo "arg2 array=${arg2[@]}"
echo "arg2 #elem=${#arg2[@]}"
echo "arg3=$arg3"
echo "arg4 array=${arg4[@]}"
echo "arg4 #elem=${#arg4[@]}"
Jetzt Setup Ihre Arrays wie dies in einer Schale:
und übergeben Argumente wie folgt aus:
. ./arrArg.sh "foo" "arr[@]" "bar" "arr2[@]"
obige Skript drucken:
arg1=foo
arg2 array=ab x y 123
arg2 #elem=3
arg3=bar
arg4 array=a1 a a bb cc it is one
arg4 #elem=5
Hinweis: Es könnte seltsam erscheinen, dass ich Skript . ./script
Syntax bin ausführen. Beachten Sie, dass dies zum Ausführen von Befehlen des Skripts in der aktuellen Shellumgebung dient.
Q. Warum aktuelle Shell-Umgebung und warum nicht eine Sub-Shell?
A. Da bash Array-Variablen zu Child-Prozesse als documented here by bash author himself
Siehe auch http://stackoverflow.com/a/1063367/2235132 – devnull