【问题标题】:Bash, exec and the quoting hellBash、exec 和引用地狱
【发布时间】:2011-09-01 08:13:37
【问题描述】:

如何在使用 exec 运行命令时保留单引号和双引号?

#!/bin/sh

CMD="erl -eval 'erlang:display("foo")'"
exec $CMD

尝试使用反斜杠,但没有帮助。例如,如果我做的事情对我来说听起来很奇怪:

#!/bin/sh

CMD="erl -eval 'erlang:display(\"foo\")'"
echo $CMD
exec $CMD

我得到了 echo 的输出,这正是我想要的,但是使用 exec 时该命令没有正确执行。

我正在研究雪豹。

有什么帮助吗?

【问题讨论】:

标签: bash escaping quotes


【解决方案1】:

尝试使用数组:

CMD=(erl -eval 'erlang:display("foo")')
echo "${CMD[@]}"
"${CMD[@]}"

【讨论】:

  • 正是我输入的内容。不过,您似乎错过了参数中的单引号 - 看起来 OP 想要在最后一个参数周围加上单引号:\''erlang:display("foo")'\'
  • 嗯,怀疑,但让 OP 说话。
【解决方案2】:

如果你使用eval而不是exec,它会起作用,如果这是你脚本中的最后一件事,它在操作上不会有很大的不同......

#!/bin/sh

CMD="erl -eval 'erlang:display(\"foo\")'"
echo $CMD
eval $CMD

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2013-12-07
    • 2016-05-29
    • 1970-01-01
    • 2018-06-26
    • 2015-02-16
    • 1970-01-01
    相关资源
    最近更新 更多