使用管道将数组发送到子shell函数?

使用管道将数组发送到子shell函数?

我确实需要将一个数组获取到子 shell,以便这些进程可以在一个脚本中一起运行。我知道我无法导出数组,但是是否可以通过管道将其发送到子 shell,我该怎么做?假设我有一个函数running();内容需要是什么,以便我可以在主程序中更改时更新其中的数组。我不想将数组存储在文件中,因为那样太慢了。

答案1

myfunction() ( ... )只需使用而不是创建一个函数myfunction() { ... }(因此它将在子 shell 中运行)并将数组作为函数参数传递。

myfunc() (
  for f in "$@"; do
    printf '%s\n' "$f"
  done
)

myfunc these arguments "are passed" 'to myfunc'

myarray=( "These values" "are set as" part 'of an array' )

myfunc "${myarray[@]}"

输出看起来像:

these
arguments
are passed
to myfunc
These values
are set as
part
of an array

注意:这只是一个示例函数,但实际上这是一个执行相同操作的更简单版本:

myfunc_simpler() (
  printf '%s\n' "$@"
)

相关内容