特殊字符,如星号 argv
special characters like asterisks argv
运行 我的脚本如下:
Node index.js POST *
在我的脚本中我这样做:
process.argv.forEach((val, index) => {
console.log(`${index}: ${val}`);
});
输出如下,其中 * 导致将我所有文件的名称转储到我的项目中:
$ node index.js POST *
0: C:\Program Files\nodejs\node.exe
1: C:\Users\myComputer\myScript\index.js
2: POST
3: commands
4: data.json
5: index.js
6: node_modules
7: package-lock.json
8: package.json
如何查看传递的 arg 是否为 astricts?
对于其他参数,如其他字符串,它工作得很好(在我的示例中 'POST')。
我也用过https://github.com/tj/commander.js和同样的问题。
使用节点版本 15
如果你 运行 在 bash
或类似的 shell 中,那么 globbing 发生在 shell 级别,在它之前曾经进入你的程序。您无法从程序内部看到是否键入了星号,因为 shell 将其切换为目录中所有文件的列表。
如果你想传递一个真正的星星,你可以把它放在引号里,这样 shell 就不会把它扩展到所有文件,而是按原样传递给程序。
运行 我的脚本如下:
Node index.js POST *
在我的脚本中我这样做:
process.argv.forEach((val, index) => {
console.log(`${index}: ${val}`);
});
输出如下,其中 * 导致将我所有文件的名称转储到我的项目中:
$ node index.js POST *
0: C:\Program Files\nodejs\node.exe
1: C:\Users\myComputer\myScript\index.js
2: POST
3: commands
4: data.json
5: index.js
6: node_modules
7: package-lock.json
8: package.json
如何查看传递的 arg 是否为 astricts?
对于其他参数,如其他字符串,它工作得很好(在我的示例中 'POST')。
我也用过https://github.com/tj/commander.js和同样的问题。
使用节点版本 15
如果你 运行 在 bash
或类似的 shell 中,那么 globbing 发生在 shell 级别,在它之前曾经进入你的程序。您无法从程序内部看到是否键入了星号,因为 shell 将其切换为目录中所有文件的列表。
如果你想传递一个真正的星星,你可以把它放在引号里,这样 shell 就不会把它扩展到所有文件,而是按原样传递给程序。