脚本nerf
调用脚本herd
,脚本调用脚本er
。 nerf
使用一个标志herd
,明确接受需要传递给的参数er
。
这在以前不是问题nerf
- 当herd
刚刚从命令行调用时,我们可以单引号将参数传递给 -p 标志,它们永远不会被herd
's解释getopts
,而是会被er
's解释getopts
。
但是现在我们已经在最终需要转到的标志中生成了值er
,所以我需要在 中扩展变量,但$file_contents
在它们到达之前nerf
不要让它们被解释。getopts
er
这三个脚本中的任何一个都可以修改。
$ cat nerf
#!/bin/bash
file_contents="`cat one_liner_file`"
er_args="-jkl -m $file_contents"
./herd -p "$er_args" # <-- the problem
$ cat herd
#!/bin/bash
passthru_args=""
while getopts "p:a:b:cde" opt
do
case $opt in
p) passthru_args="$OPTARGS" ;;
...
esac
done
./er "$passthru_args"
$ cat er
#!/bin/bash
while getopts "jklm:" opt
do
case $opt in
...
esac
done
如果我在上面的标记行上使用单引号,我会得到传递的文字字符串 "$er_args"。使用双引号,标志直接由herd
. 使用单引号内的双引号,任何 getopts 都不会解释标志。
我认为这里没有优雅的解决方案,但如果我错了,请告诉我。我能想到的唯一解决方案是糟糕的:
- 通过 . 显式公开所有
er
的标志herd
。 - 从 中删除
er
呼叫herd
并将其直接放入nerf
. - ???