我有这个数组:
PARAMETERS_OF_COMPONENTS[1]="component1"
PARAMETERS_OF_COMPONENTS[2]="component21 component22 component23"
PARAMETERS_OF_COMPONENTS[3]="component3"
PARAMETERS_OF_COMPONENTS[4]="component41 component42 component43"
我想将该数组传递给这个函数:
foo()
{
local param1="$1"
local param2="$2"
local array_param="$3"
. . .
echo "${PARAMETERS_OF_COMPONENTS[@]}"
}
当我以这种方式传递数组时:
foo "$param1" "$param2" "${PARAMETER_OF_COMPONENTS[@]}"
然后函数只打印:
component1
另外,我已经尝试了几种其他方法来传递数组,但我仍然没有找到正确的解决方案。
如何正确传递数组以发挥作用?此外,解决方案必须与 Dash 兼容(至少没有 bashisms)。
UPD @Kusalananda 向我解释说 Dash 不支持数组。谢谢你的澄清。
我会问另一个。如何将许多参数传递给函数而不直接以方式传递$1
,$2
......并且不涉及全局变量?我有几个想法,但我想听听你的方法吗?
我的任务是将函数从一个文件移动到另一个文件,但该函数使用全局变量。我不想使用全局变量。那么如何以最正确的方式做到这一点呢?
在
sh
不支持数组和local
关键字的 shell 中,您仍然可以$@
在函数中用作数组。您可以使用 with 选择前两个参数,shift 2
然后使用$@
which 现在保存所有其余参数。如果函数不需要修改全局变量并且您不想用不必要的变量污染变量命名空间,则将函数的主体包含在
( ... )
而不是使所有变量成为局部变量。{ ... }
使用
foo
如上声明的原始数据:在支持数组 和 的 shell 中
local
,您将执行完全相同的操作(但函数可能希望使用声明为local
的变量),并且调用可能是要在 中传递多个数组
bash
,我会在函数中使用名称引用(需要bash
4.3 或更高版本):请注意,您不能将数组变量传递给与函数中相应名称引用变量同名的函数(我认为这是一个错误,它适用于
ksh93
)。