Вы не можете использовать ничего, кроме строк, в качестве аргументов функции оболочки. Но вы можетеpass a reference to a variable containing an array если ваша оболочка поддерживает variable indirection. Например, в Bash:
$ copy_func() {
name="${1}[@]"
copy=("${!name}")
echo "Array length: ${#copy[@]}"
echo "First element: ${copy[0]}"
echo "Second element: ${copy[1]}"
}
$ foo=('a a a' 'b b b')
$ copy_func 'foo'
Array length: 2
First element: a a a
Second element: b b b
Однако, в этот момент вы уже за вменяемое применение Bash, и следует серьезно рассмотреть вопрос об использовании реального языка вместо.
Вы также можете пройти по всей декларации переменной и eval
его, но это too dangerous for production code:
$ eval_func() {
eval "$1"
echo "Array length: ${#foo[@]}"
echo "First element: ${foo[0]}"
echo "Second element: ${foo[1]}"
}
$ var='foo=("a a a" "b b b")'
$ eval_func "$var"
Array length: 2
First element: a a a
Second element: b b b
Bash сфера очень свободно, так что вы можете просто объявить его внешней области, а затем получить доступ к ней в функции. Я бы настоятельно рекомендую этот метод, если вы не можете использовать другой язык:
$ access_func() {
echo "Array length: ${#foo[@]}"
echo "First element: ${foo[0]}"
echo "Second element: ${foo[1]}"
}
$ foo=('a a a' 'b b b')
$ access_func
Array length: 2
First element: a a a
Second element: b b b
ли вы хотите передать _variableName_ (что содержит массив) или хотите передать сам массив (например, $ 1 = element1 $ 2 = element2)? (из вас вопрос, я думаю, вы хотите передать имя переменной - для косвенного расширения) – jm666
Вы не можете этого сделать (присваивание является выражением само по себе), и вы не можете передавать массивы для начала. Вы либо передаете имя, либо используете косвенное направление, либо передаете все значения в качестве независимых аргументов. –