このコードはapache2サービスの開始スクリプトからのものです。
それは何を意味するのでしょうか?
SCRIPTNAME="${0##*/}"
このコードはapache2サービスの開始スクリプトからのものです。
それは何を意味するのでしょうか?
SCRIPTNAME="${0##*/}"
実行中のスクリプトの名前を見つけ、そのディレクトリを削除します。たとえば、スクリプトが/etc/init.d/httpd
の場合、これはSCRIPTNAME=httpd
に設定されます。
$0
または${0}
は、実行されているスクリプトの名前です。 ##
演算子を使用して、*/
というパターンに一致する先頭の文字列を削除します。 *
はワイルドカード文字なので、*/
は "任意の文字列の後にスラッシュが続く"を意味します。
この効果は、先頭のディレクトリ名を$0
から削除し、スクリプトの名前だけを残すことです。
マニュアルバッシュから:
$ {パラメータ#ワード}
$ {パラメータ##ワード}ワードだけのようにパターンを生成するために展開されパス名展開。パターン がパラメータの値の先頭と一致する場合、展開の結果は、最も一致するパターン(「#」の場合)または一致するパターンが最も長い (「##」の場合)のパラメータの拡張値 です。ケース)が削除されました。パラメータが
@
または*
の場合、パターン削除操作が各位置パラメータに順番に適用され、展開は結果の リストになります。 parameterが@
または*
に添字付けされた配列変数の場合、パターン削除操作が配列の各メンバーに順番に適用され、展開が結果リストになります。
左側は簡単です:変数SCRIPTNAME
に割り当てられます。 右側はより複雑である:
$0
または${0}
は、現在のシェルまたはスクリプトを呼び出すために使用される名前です。${VAR##pattern}
がbegginingから削除pattern
(エンドを削除するには、最短または%
/%%
のための1 #
を使用して一致する最長の文字列と変数$VAR
の値である。だからあなたの式はスタートを削除します。。のhttp:// stackoverflowのにスクリプトを呼び出し、そして、最後のスラッシュを含むために使用される名前の
ところで、そのプログラムがないbasename
ものです
'##' POSIXは移植可能ですか、それともbashだけですか?私はまだ一般的に 'basename'を使ってこれを行います。 –
@StephenP:それはバシズムです。 – ninjalj
はここに私の答えを参照してください。 com/questions/9527722 – 0xC0000022L