0

/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+"$@"}

「$@」が引数を意味することは知っています。しかし、{1+"$@"} は何を意味するのでしょうか?

4

2 に答える 2

4

IEEE Std 1003.1 (POSIX 2013) から、シェル コマンド言語:

${parameter:+[word]}

代替値を使用します。パラメータが設定されていないか null の場合、null が代用されます。それ以外の場合は、word の展開 (word が省略されている場合は空の文字列) が置換されます。

つまり、 が設定されていない場合、つまりコマンド ライン引数がない場合を除いて、コマンド ライン引数である${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.)

于 2013-10-09T14:14:15.157 に答える