当运行bash脚本时,Nodejs process.argv [2]在空格后省略数据,即使是\

时间:2015-05-23 18:26:41

标签: node.js bash arguments

所以我有一个接受参数的节点脚本,如果我单独运行节点脚本,那么类似game\ of\ thrones整个字符串被认为是process.argv[2]这是我想要的和期望的,问题是当我运行一个名为add的非常小的bash脚本,其中包含

#!/bin/bash

echo `nodejs ~/Codes/localHost/node/headsUp/add.js $1`

然后立即./add game\ of\ thrones process.argv[2]只运行game为什么会这样?如果可能的话,我希望有一个解决方案,允许我在参数之间放置空格来拥有多个参数,而不是像$@那样使用。提前致谢。哦,当我在bash脚本中echo $1时,它会显示为完整的game of thrones

2 个答案:

答案 0 :(得分:2)

如果您没有引用<warSourceExcludes>frontEndWorkspace/**</warSourceExcludes>,则告诉bash将参数重新分配为单词。为了将$1(或任何其他参数或变量)逐字传递到另一个脚本或二进制文件中,您需要确保它被引用:

$1

请注意,echo `nodejs ~/Codes/localHost/node/headsUp/add.js "$1"` 的输出也会被分词,因为它没有引用。如果您想保留格式(例如换行符),您还需要引用它:

nodejs

在这里,我将已弃用的反引号语法更改为推荐的echo "$(nodejs ~/Codes/localHost/node/headsUp/add.js "$1")" 语法,该语法更好。

答案 1 :(得分:0)

感觉非常''变通',这让我感觉有更好的方法,但对于那些可能需要这个工作的人,你可以连接你的process.argv变量。使用此方法,您可以运行脚本并为其赋予多个以空格分隔的参数(实际空格不是以\开头的空格)

function conCatArgs(input){
var args = [];
for(i = 0; process.argv.length - 2 > i; i++){
    args[i] = input[i + 2]
}
console.log(args);
}

conCatArgs(process.argv);