アプリ版:「スタンプのみでお礼する」機能のリリースについて

シェルスクリプトで、自身のファイルパスを取得する方法を検索したところ、下記ページへとたどり着きました。
▼おしえて!HOME'Sくん シェルスクリプト 自身のファイルパスを取得する方法
http://oshiete.homes.jp/qa2419248.html
▼教えて?Coneco shシェルで実行パスではなくファイルのパスを取得する方法
http://oshiete.coneco.net/qa2866868.html

しかし、それぞれのページに掲載されていた
${0%/*}

${1%/*}
の意味がどうしてもわかりません。(一応、bashとかで検索してみたりはしました)

そこで、下記内容について、教えてください!
・この0というのは、$0のことなのでしょうか。
・この%は、正規表現か何かなのでしょうか。
・この/は何を指しているのでしょうか?
・この*は、どの部分の1文字以上を指しているのでしょうか?

以上、よろしくお願いしますッ!

A 回答 (1件)

man bashに書いてあります。



>この0というのは、$0のことなのでしょうか。

$0は${0}の簡略表現で、${0%/*}などはそれに修飾子を付けたものです。

>この%は、正規表現か何かなのでしょうか。

正規表現ではありません。man bashより抜粋:
> ${parameter%word}
> ${parameter%%word}
>word が展開され、パス名展開の場合と同じようなパターンを作ります。
>このパターンが parameter を展開した値の末尾の部分とマッチする場合、
>展開結果は parameter を展開した値から最短一致パターン (``%'' の場合)
>または最長一致パターン (``%%'' の場合) を取り除いたものになります。

>この/は何を指しているのでしょうか?
>この*は、どの部分の1文字以上を指しているのでしょうか?

「/*」は、スラッシュの後に任意の文字が0文字以上を表します。正規表現で書くと「/.*」です。
「パス名展開の場合と同じような」と書いてありますが、パス名展開の時 * は、パス区切りの / や ファイル名先頭の . にマッチしませんが、ここでは任意の文字列にマッチします。うーむ、この違いはman bashに書いてないかも。

man bashの説明と合わせると、${0} の内容の末尾から「/*」のファイルマッチが合致する最短パターンを取り除いたものになります。
${0}==/aaaa/bbbb/cccc だとすると、「/*」は、/aaaa/bbbb/cccc と /bbbb/cccc と /cccc に合致しますがその中の最短である /cccc が選択され、それが${0}から除去された物が最終的な結果です。つまり、/aaaa/bbbb
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

事前に4時間ぐらいかけて検索しても分からなかったことなのに、
これだけ詳細にご説明していただけたおかげで、
完全に理解することができました。

お礼が遅くなりましたが、
本当にありがとうございましたッ!

お礼日時:2009/01/24 13:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!