У меня есть следующий код:
myfunc(){
group=("$1")
for i in "${group[@]}"
do
printf "%s\n" "$i"
done
}
Я использую его для печати каждого объекта в group
массив. Этот массив должен быть параметром в терминале. Но когда я пытаюсь использовать его в терминале в .bash_profile
файл это не работает. Я пробую это путем выполнения следующей команды:
myfunc ("one" "two" "three")
Вы, кажется, ожидаете, что оболочка генерирует некоторую анонимную переменную типа массив - AFAIK, в котором это не возможно bash
.
Простой подход должен передать отдельные аргументы (который может содержать пробел, если правильно заключено в кавычки), и затем обратитесь к ним с "$@"
myfunc ()
{
group=("$@");
for i in "${group[@]}"
do
printf "%s\n" "$i"
done
}
затем, например,
$ myfunc "one nine" "two" "three four five"
one nine
two
three four five
хотя в данном случае я не вижу преимущества дополнительной переменной типа массив - можно также просто циклично выполниться "$@"
непосредственно:
myfunc ()
{
for i in "$@"
do
printf "%s\n" "$i"
done
}
Если Вы просто хотите, чтобы это "было похоже на массив" в контексте вызова, то единственный способ, которым я могу думать, чтобы сделать, который должен был бы передать его как строку, например. myfunc '("one nine" "two" "three four five")'
и затем eval
присвоение в Вашей функции eval group="$1"
но я не рекомендую делать это.