来自/ usr / local / bin / erl
ROOTDIR=/usr/local/lib/erlang
BINDIR=$ROOTDIR/erts-5.9.1/bin
EMU=beam
PROGNAME=`echo $0 | sed 's/.*\///'`
export EMU
export ROOTDIR
export BINDIR
export PROGNAME
exec $BINDIR/erlexec ${1+"$@"}
我知道“$ @”meams论点。但是{1 +“$ @”}意味着什么?
答案 0 :(得分:4)
来自IEEE Std 1003.1(POSIX 2013),Shell command language:
${parameter:+[word]}
使用替代价值。如果参数未设置或为null,则应替换null;否则,单词的扩展(如果省略单词,则为空字符串)将被替换。
即,${1+"$@"}
扩展为"$@"
的值,即命令行参数,除非未设置$1
,即没有命令行参数,在这种情况下表达式扩展到没有。一个更简单的脚本,显示了它是如何工作的
echo '"' ${1+"$@"} '"'
如果您将其存储在文件test.sh
中并运行它,则会得到:
/tmp$ sh test.sh
" "
/tmp$ sh test.sh 1
" 1 "
/tmp$ sh test.sh 1 2
" 1 2 "
(开头和结尾的空格来自echo
。)
答案 1 :(得分:4)
larsmans提供了对语义的解释,但没有说明为什么${1+"$@"}
与简单"${@}"
不同。在一个正常运行的shell中,“$ {@}”扩展为空。即:foo "$@"
如果“$ @”为空,则应该在没有参数的情况下调用foo
。在行为不正常的shell中,将使用一个参数(空字符串)调用foo "$@"
。许多历史shell将“$ @”扩展为空字符串而不是任何内容,但${1+"$@"}
正确扩展为空。