我的实际情况更复杂,但这就是我遇到的问题。
简化示例
echoSimultaneously.bash:
echoSimultaneously() {
parallel -j 0 echo ::: $string
}
run() {
local IFS string
# split on new lines not on white space
# don't have to quote vars/everything
IFS=$'\n'
string=$@
echoSimultaneously $string
}
export -f echoSimultaneously
函数 run 将由另一个脚本调用,在这个脚本被它获取后,例如另一个脚本会执行:run {1..10}
,我可以调用run
这个脚本,但这不是我做事的方式。
问题:
- 这些变量
IFS
不会被as启动它自己的 shell 或实例string
所拾取,因此它们不在范围内。echoSimultaneously
parallel
- 对变量进行
export
操作也不起作用。
请不要对未引用的变量迂腐,只关注问题,我很清楚可能会出错的事情。
示例,尽管上面给出了
parallel -j 0 echo ::: {1..10}
1
2
3
4
5
6
7
8
9
10
这当然有效:
echoSimultaneously() {
IFS=$'\n'
parallel -j 0 echo ::: $@
}
run() {
local IFS string
IFS=$'\n'
string=$@
echoSimultaneously $string
}
export -f echoSimultaneously
IFS
并且参数$@
在其中echoSimultaneously
,因此当 GNU 并行在另一个 shell 中运行时,这些参数会被拾取。
哎呀,这太简单了,应该知道......
这
export
对于变量来说需要位于函数之外。