脚本nerf调用脚本herd,脚本调用脚本er。 nerf使用一个标志herd,明确接受需要传递给的参数er。
这在以前不是问题nerf- 当herd刚刚从命令行调用时,我们可以单引号将参数传递给 -p 标志,它们永远不会被herd's解释getopts,而是会被er's解释getopts。
但是现在我们已经在最终需要转到的标志中生成了值er,所以我需要在 中扩展变量,但$file_contents在它们到达之前nerf不要让它们被解释。getoptser
这三个脚本中的任何一个都可以修改。
$ 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. - ???