Bash $*做什么
我试图修改一个没有很好文档记录的shell脚本。我知道基本知识,但这个片段让人困惑 我不确定这条线的作用是什么:Bash $*做什么,bash,shell,Bash,Shell,我试图修改一个没有很好文档记录的shell脚本。我知道基本知识,但这个片段让人困惑 我不确定这条线的作用是什么: time java -showversion -jar ${here_dir}/AESampleTool.jar -f $FILES -d ${output_dir} $* 我不知道$*是什么。谷歌没有太多。上面的行是否将$*设置为它前面的值?脚本中的下一行是$*作为参数传递给名为launch的函数: launch $* 1>$log_file 2>&1 下面
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=$?
}
$*
表示所有参数,但传递这些参数的方式是错误的,因为如果不加引号(如此处),它将在空白处拆分这些参数,如果加引号,则将它们合并为单个参数。最好使用“$@”
,这将以空格安全的方式传递它们。$*
表示所有参数,但传递它们的方式是错误的,因为如果不加引号(如此处),它将在空格上拆分它们,如果加引号,则将它们合并为单个参数。最好使用“$@”
,这将以空格安全的方式传递它们。$*
和$@
都与shell的所有参数相关,但它们做的事情不同
当未被引用时,$*
和$@
做同样的事情。它们将每个单词(非空白序列)视为单独的参数
当引用时,它们是完全不同的
“$*”
将参数列表视为单个空格分隔的字符串,而“$@”
将参数视为与在命令行上指定时几乎完全相同 $*
和$@
都与shell的所有参数相关,但它们做的事情不同
当未被引用时,$*
和$@
做同样的事情。它们将每个单词(非空白序列)视为单独的参数
当引用时,它们是完全不同的
“$*”
将参数列表视为单个空格分隔的字符串,而“$@”
将参数视为与在命令行上指定时几乎完全相同 你试过手册页了吗?检查这个问题:你试过手册页了吗?检查这个问题:好的。。。。shell脚本正在调用launch(),调用它传递的所有参数,而调用java的launch函数中的ine正在将launch()接收到的所有参数传递给java.jar文件?是吗?好的。。。。shell脚本正在调用launch(),调用它传递的所有参数,而调用java的launch函数中的ine正在将launch()接收到的所有参数传递给java.jar文件?是吗?谢谢。我没有写原剧本。不过我会改变的。谢谢。我没有写原剧本。不过我会改变的。