【问题标题】:Literal quotes in flags for a command in a bash scriptbash 脚本中命令的标志中的文字引号
【发布时间】:2009-09-22 02:06:46
【问题描述】:

我正在编写一个 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"'

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

【问题讨论】:

  • 我不明白——你的“尝试运行”中的双引号非常完整,并且前导的破折号似乎神秘地消失了(可能是错字?)——你能更好地解释一下吗?你遇到的问题?顺便说一句,如果不是 varoutput,$ 变量中有什么?
  • 前面的破折号是错字。固定。

标签: bash shell escaping quotes


【解决方案1】:

你说...:

正常运行脚本,你会 运行

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

...但是在$ 提示符下运行的shell 会删除":perl 的脚本永远不会看到它们(它们只是起到了防止空格和特殊字符(例如'>)的作用'、'

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 2018-03-10
    • 1970-01-01
    相关资源
    最近更新 更多