我有一个程序,它需要一些命令行参数.
它的执行方式如下:
user@home $ node server.js SOME ARGUMENTS -p PORT -t THEME OTHER STUFF
现在我想为它制作一个可执行的启动器:
#!/bin/bash node server.js ARGUMENTS GIVEN FROM COMMAND LINE
这该怎么做?
我想将相同的参数传递给命令(不知道它们有多少和它们将是什么).
有办法吗?
$@
在双引号中使用变量:
#!/bin/bash node server.js "$@"
这将提供在命令行上传递的所有参数,并保护可能出现在其中的空格.如果不使用引号,"foo bar"
则传递给脚本的参数(例如,其字符串值在其中有空格的单个参数)将node
作为两个参数传递.从文档:
当扩展发生在双引号内时,每个参数都会扩展为单独的单词.也就是说,"$ @"相当于"$ 1""$ 2"....
根据另一个答案,编辑添加:我不明白你为什么要使用它$*
.执行以下脚本:
#!/bin/bash echo "Quoted:" for arg in "$*"; do echo $arg done echo "Unquoted:" for arg in $*; do echo $arg done
使用,以下(假设您的文件保存为script
可执行文件):
$ script "a b" c
你会得到:
Quoted: a b c Unquoted: a b c
您的用户打算传递两个参数:a b
和c
."引用"案例将其作为一个论点处理:a b c
.在"非上市"的情况下处理它的3个参数:a
,b
和c
.你会有不满意的用户.