繁体   English   中英

通过bash脚本运行时,Nodejs process.argv [2]会在空格后甚至\\省略数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM