![](/img/trans.png)
[英]Arguments passed to nodejs script are are empty according to process.argv
[英]Nodejs process.argv[2] is omitting data after space even with \ when run through bash script
因此,我有一个带参数的节点脚本,如果我单独运行该节点脚本,则像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
。
当您无法引用$1
,您就是在告诉bash将参数重新分割成单词。 为了逐字传递$1
(或任何其他参数或变量)到另一个脚本或二进制文件中,您需要确保将其引用:
echo `nodejs ~/Codes/localHost/node/headsUp/add.js "$1"`
请注意,由于未引用nodejs
的输出, nodejs
也会将其拆分。 如果要保留格式(例如换行符),则还需要引用该格式:
echo "$(nodejs ~/Codes/localHost/node/headsUp/add.js "$1")"
在这里,我将不推荐使用的反引号语法更改为推荐的$(...)
语法,这样可以更好地嵌套。
感觉很“变通”,这让我觉得有一种更好的方法,但是对于那些可能需要进行此工作的人,您可以将其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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.