2012-01-30 17 views
2

Archlinuxのmkinitcpioスクリプトに次のコードスニペットが見つかりました。

cleanup() { 
    if [[ $workdir ]]; then 
     # when PRESET is set, we're in the main loop, not a worker process 
     if ((SAVELIST)) && [[ -z $PRESET ]]; then 
      msg "build directory saved in %s" "$workdir"                               
     else 
      rm -rf "$workdir" 
     fi 
    fi 

    exit ${1:0} 
} 

ここでexit ${1:0}は冗長ですか?単にexit $1と書いてみませんか?私はこの関数を1、-1,130のような引数でテストしましたが、単純版と複雑版の違いはありません。

答えて

2

これは、引数なし(または空の文字列引数)で使用され、結果はexit 0になります。これは、exitを単独で使用するのとは異なります。exitが単独で前のコマンドの終了ステータスを使用するためです。 msgまたはrmが0以外のステータスになることが期待されていない場合でも、コードを変更するときにこれについて考える必要がなくなります。

2

それは、インデックス0からの変数の部分文字列を取っていると、冗長であるようです...同じ値です。ただし、終了する空の文字列はexit 0と同じです。さて、それがexit ${1:-0}なら、それは完璧な意味を持つでしょう - 0(成功)はデフォルトの出口値になり、パラメーター$1がなければ使用されます。ただし、明示的に0を渡す必要はありません。

+0

はい、私はトリック 'exit $ {1:-0}を知っていて、デフォルトの終了値としてゼロを作りました。しかし、これはとても異なっています。 –

0

exitは引数なしでexit 0と同じ方法であるため、この場合は冗長です。したがって、exit $1exit ${1:-0}は事実上同じです。

関連する問題