我有一个程序需要一些命令行参数。
它是这样执行的:
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
作为两个参数。来自documentation :
When the expansion occurs within double quotes, each parameter expands to a separate word. That is, "$@" is equivalent to "$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
。 “Unquoted”案例将其作为 3 个参数处理:a
、b
和 c
。您会有不满意的用户。
关于linux - 将命令行参数传递给 bash 中的另一个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20731398/