2

我正在编写一个 Bash 脚本,其中我正在运行一个 perl 脚本,该脚本需要其中包含双引号的标志。正常运行脚本,你会运行

$ perl script.pl -flag="something" -anotherflag="somethingelse"

在我的脚本中,我在这些标志中使用变量,但想保留双引号,所以我有类似的东西:

variable=foo
perl script.pl -flag=\"something\" -anotherflag=\"$variable\"

当我运行时bash -x myscript.sh,我看到它在整个标志周围添加了单引号,同时保持双引号,导致 perl 脚本出错:

perl script.pl '-flag="something"' '-anotherflag="foo"'

我也尝试eval了整个事情(eval perl [...]),它完全去掉了双引号。如何让 Bash 在双引号完整的情况下运行脚本?

4

1 回答 1

0

你说...:

正常运行脚本,你会运行

$ perl script.pl -flag="something" -anotherflag="somethingelse"

...但随后在$提示符下运行的 shell 将删除": perl 的脚本将永远不会看到它们(它们只是起到了防止空格和特殊字符,如 '>'、'<'、'|、等等,从它们内部被解释——那些空格和/或特殊字符将作为 arg 的一部分传递)。使用您给它们的值(没有空格,没有特殊符号),这些双引号完全没用,省略它们绝对没有区别。

无论如何,如果这确实是您想要的效果,只需在您的 bash 脚本中执行:

perl script.pl -flag="something" -anotherflag="$variable"

(或者,省略双引号 - 绝对无动于衷something$variable如果在您的示例中只是foo但并非在所有情况下都无动于衷)。

于 2009-09-22T02:25:47.337 回答