【问题标题】:How to preserve quotes in a bash parameter?如何在bash参数中保留引号?
【发布时间】:2014-03-21 22:07:26
【问题描述】:

我有一个 bash 脚本 (Mac OS X),它依次调用 Node.js 命令行应用程序。

我通常这样调用 Node.js 应用程序:

node mynodeapp events:"Open project"

尽管“Open”和“project”之间有空格,但哪个节点作为一个参数解析没有问题。

我这样调用我的 bash 脚本:

. mybashscript.sh 2014-03-20 "Open project"

在我拥有的 bash 脚本中:

EVENTSQUOTES=\"$2\"
echo node mixpanel-extract date:$1 events:$EVENTSQUOTES
node mixpanel-extract date:$1 events:$EVENTSQUOTES

运行脚本会产生:

node mixpanel-extract date:2014-03-20 events:"Open project"

Parameters: { date: '2014-03-20',
  events: [ '"Open' ] }

虽然echo 输出行看起来不错,但我的Node.js 应用程序的Parameters: 输出告诉我bash 将参数一分为二。我也试过用更多的引号括起来,例如EVENTSQUOTES='\"$2\"' 但没什么区别。

【问题讨论】:

  • @anubhava 对您的问题有准确的答案。请允许我补充一点:只有 syntactic 引号对解析有任何影响。您转义的任何引号都是数据,而不是语法(并且任何扩展结果都是 always 数据,而不是语法),因此在引号内添加引号会更改您的数据,而不是告诉解析器解释什么它看起来不同。

标签: node.js bash shell


【解决方案1】:

你还需要在调用时使用引号:

node mixpanel-extract date:"$1" events:"$EVENTSQUOTES"

【讨论】:

    【解决方案2】:
    echo node mixpanel-extract "date:$1" "events:$2"
    node mixpanel-extract "date:$1" "events:$2"
    

    变量在使用时也要加引号,否则会分词。

    【讨论】:

    • -1:您实际上并没有在这里引用每个扩展。
    • 呃,不打算争论了。从问题中复制粘贴总是一个坏主意,尤其是在睡觉前。现在我想躲在一个黑暗的角落里,因为通常我是抱怨缺乏报价的人。感谢您的提醒。
    猜你喜欢
    • 2010-12-12
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    相关资源
    最近更新 更多