我有以下代码:
myfunc(){
group=("$1")
for i in "${group[@]}"
do
printf "%s\n" "$i"
done
}
我用它来打印group
数组中的每个项目。此数组应该是终端中的一个参数。但是当我尝试在文件内的终端中使用它时,.bash_profile
它不起作用。我通过运行以下命令尝试此操作:
myfunc ("one" "two" "three")
答案1
您似乎期望 shell 生成某种匿名数组变量 - 据我所知,这是不可能的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"
,但我确实不是建议这样做。