我正在编写一个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运行带有双引号的脚本?
答案 0 :(得分:0)
你说......:
正常运行脚本,你会的 运行
$ perl script.pl -flag =“something” -anotherflag = “somethingelse”
...但是在$
提示符下运行的shell会删除"
:perl的脚本永远不会看到它们(它们只是扮演了防止空格和特殊字符的角色)例如'>','<','|等,在其中被解释 - 这些空格和/或特殊字符将作为arg的一部分传递。使用你给它们的值(没有空格,没有特价),这些双引号完全没用,省略它们绝对没有区别。
无论如何,如果这确实是您想要的效果,只需在您的bash脚本中执行:
perl script.pl -flag="something" -anotherflag="$variable"
(或者,省略双引号 - 它在something
周围无动于衷,在$variable
周围无动于衷,如果在您的示例中它只是foo
,但并非在所有情况下都是如此)。