2014-04-04 33 views
0

我想修改一个没有很好记录的shell脚本。我知道基本知识,但这个片段很混乱。

我不知道这一行做了什么:

time java -showversion -jar ${here_dir}/AESampleTool.jar -f $FILES -d ${output_dir} $* 

我不知道是什么$ *是。谷歌没有太多。上面的行设置$ *等于之前的行吗?脚本中的下一行是$ *作为参数传递给名为launch的函数:

launch $* 1>$log_file 2>&1 

下面是该函数。奇怪的部分是它似乎是一个循环参考。函数内部是设置$ *但是然后作为参数传递给函数本身。

function launch { 
hset -x 
USER=$AEX_USER 
l_output_dir=$output_dir 
l_here_dir=$here_dir 
l_LOGFILE=$LOGFILE 
l_FILES=$FILES 
l_EXE_JAR=$EXE_SH 
l_AEX_LOGDIR=$AEX_LOGDIR 
l_AEX_LOGNAME=$AEX_LOGNAME 
time java -showversion -jar ${here_dir}/AESampleTool.jar -f $FILES -d ${output_dir} $* 
rc=$? 
} 
+0

您是否尝试过man page? –

+0

看看这个问题:https://stackoverflow.com/questions/5163144/what-are-the-special-dollar-sign-shell-variables – Saucier

回答

3

$*意味着所有的参数,但它是错误的方式将它们传递,因为它要么在空白分裂他们,如果不需要加引号(喜欢这里),或者他们是否引用合并成一个单一的参数。最好使用"[email protected]",它会以空白安全的方式传递它们。

+0

谢谢。我没有写出原始脚本。我会尽快做出改变。 –

1

$*[email protected]都与shell的所有参数相关,但它们做了不同的事情。

未加引用,$*[email protected]做同样的事情。他们将每个单词(非空白序列)视为单独的参数。

报价他们是完全不同的。 "$*"将参数列表视为单个空格分隔的字符串,而"[email protected]"将参数视为与在命令行上指定的参数几乎完全相同。

+0

好的....所以shell脚本调用了launch()以及它传递的所有参数,并且调用java的launch函数中的ine将所有launch()接收的参数传递给java .jar文件?是对的吗? –

+0

@DavidGreen是的,这是正确的。 –