所以我有一个接受参数的节点脚本,如果我单独运行节点脚本,那么类似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
。
答案 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);