- ベストアンサー
シェルスクリプト 自身のファイルパスを取得する方法
- シェルスクリプトで自身のファイルパスを取得する方法についての質問です。
- 検索した結果、参考になるページを見つけましたが、特定の記号の意味が理解できません。
- 具体的には、$0や%や/や*の意味について教えてほしいとのことです。
- みんなの回答 (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
お礼
ご回答ありがとうございます! 事前に4時間ぐらいかけて検索しても分からなかったことなのに、 これだけ詳細にご説明していただけたおかげで、 完全に理解することができました。 お礼が遅くなりましたが、 本当にありがとうございましたッ!