Czy skrypt arrArg.sh
tak:
#!/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[@]}"
setup teraz twoje tablice jak to w powłoce:
arr=(ab 'x y' 123)
arr2=(a1 'a a' bb cc 'it is one')
i przekazać argumenty takie jak ten:
. ./arrArg.sh "foo" "arr[@]" "bar" "arr2[@]"
Powyższy skrypt będzie druk:
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
Uwaga: To może wydawać się dziwne, że ja wykonywania skryptu za pomocą . ./script
składnię. Zauważ, że służy to do wykonywania poleceń skryptu w bieżącym środowisku powłoki .
Pytanie: Dlaczego obecne środowisko powłoki i dlaczego nie podrzędna?
A. Ponieważ bash nie wyeksportować zmienne tablicowe do procesów potomnych jako documented here by bash author himself
Zobacz także http://stackoverflow.com/a/1063367/2235132 – devnull