2016-06-28 19 views
0

シェルスクリプトに関する知識がありません。誰でもこれが何を意味するのか説明できますか?

exec python2.7.1 "${BASEDIR}/../foo/foo.py" ${1+"[email protected]"} 

これは、foo.pyファイルをfooフォルダ内で実行すると思います。しかし、${1+"[email protected]"}の意味は?

+2

「$ @」だけではそれを使用する説得力のある理由は考えられません。 –

答えて

0

[email protected]は、スクリプトがコマンドライン引数を処理するためにシェルが使用する組み込み変数の1つです。スクリプト内:

$0

$*

は、すべての引数のリストです...

$1は、最初の引数

$2 2番目の引数がある、などであるスクリプトを起動したコマンドでありますスクリプトを起動したコマンドを含む

[email protected]は、コマンドtを含まないすべての引数のリストですハットはこのスクリプトを開始した。だから、全体のコマンドだった場合:

myscript.sh glorf frolg flerg 

その後echo [email protected]はエコーされます:

glorf frolg flerg 

を私は$ {1} ...ものが何であるかはよく分かりません。それは行動を変えていないようです。それでもまだ[email protected]をエコーし​​ます。基本的にあなたのスクリプトはfoo.pyにすべての引数を渡します。

よろしくお願いいたします。@Wander Nauta hereを見ると、${1+"[email protected]"}は「$1が存在すれば、[email protected]を渡します。それ以外の場合は何も渡しません」という意味です。

+2

'$ {... + ...}'は[代替値構文]です(http://www.tldp.org/LDP/abs/html/parameter-substitution.html#PARAMALTV)。引数が与えられていなければ空文字列を渡します。 –

+1

私の答えを更新しました、ありがとう@ワンダー! –

+0

'echo $ @'は非常に悪い習慣です - 'printf '%s \ n' $ @'対 'printf '%s \ n" "$ @" 'を興味深い内容(' set - ' helloなぜなら、引用符がなければ、シェルは文字列を分割し、それらを渡す前に内容をglob-expandするからです。したがって、 '$ @'を使うと現在のディレクトリにあるすべてのファイル名のリストが出力され、 ''残酷 ''と' 'world''の間のスペースは改行になりますが、' '$ @" 'であれば、入力されました。 –

関連する問題