2013-12-22 105 views
2

我有一个需要一些命令行参数的程序。将命令行参数传递给bash中的另一个命令

它执行的是这样的:

[email protected] $ node server.js SOME ARGUMENTS -p PORT -t THEME OTHER STUFF 

现在我想为它可执行启动:

#!/bin/bash 

node server.js ARGUMENTS GIVEN FROM COMMAND LINE 

如何做到这一点?

我想将相同的参数传递给命令(不知道它们将会有多少和什么)。

有没有办法?

回答

7

使用[email protected]变量在双引号:

#!/bin/bash 

node server.js "[email protected]" 

这将提供命令行上传递的所有参数和保护可能出现在他们的空间。如果你不使用引号,像"foo bar"这样的参数(也就是说,其中一个字符串值有一个空格的参数)传递给你的脚本将作为两个参数传递给node。从documentation

当扩展发生在双引号内时,每个参数将扩展为单独的单词。也就是说,“$ @”相当于“$ 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 bc。 “Quoted”情况将其处理为一个参数:a b c。 “未加引号”的情况将其处理为3个参数:a,bc。你会有不愉快的用户。

+0

我提到'$ *'因为它经常被庆典初学者,而不是'$ @'。 –

+0

*鉴于其他答案*部分是有点混淆(不是答案的真正部分),但自从你来之前我会把这个给你。谢谢。 – MightyPork