bash脚本中命令的标志中的文字引号

时间:2009-09-22 02:06:46

标签: bash shell escaping quotes

我正在编写一个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运行带有双引号的脚本?

1 个答案:

答案 0 :(得分:0)

你说......:

  

正常运行脚本,你会的   运行

     

$ perl script.pl -flag =“something”   -anotherflag = “somethingelse”

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

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

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

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