Как мы знаем, в bash-программировании способ передачи аргументов составляет $1
,..., $N
Однако я обнаружил, что нелегко передать массив в качестве аргумента функции, которая получает более одного аргумента. Вот один пример:
f(){
x=($1)
y=$2
for i in "${x[@]}"
do
echo $i
done
....
}
a=("jfaldsj jflajds" "LAST")
b=NOEFLDJF
f "${a[@]}" $b
f "${a[*]}" $b
Как описано, функция f
получает два аргумента: первый присваивается x
который является массивом, второй - y
.
f
можно назвать двумя способами. Первый способ использует "${a[@]}"
в качестве первого аргумента, и результат:
jfaldsj
jflajds
Второй способ использует "${a[*]}"
в качестве первого аргумента, и результат:
jfaldsj
jflajds
LAST
Ни один из результатов не соответствует желаемому. Итак, есть ли у кого-нибудь идеи о том, как правильно передавать массив между функциями?