bashでスクリプトのあるディレクトリの場所を取得する方法です。

rubyで言うところの

File.dirname(File.expand_path(__FILE__))

を、bashでやりたかったのですが、今まで適当に誤摩化してました。こたえはこちらにありました。

Bashシェルスクリプトで自分の絶対パスを取得

echo $(cd $(dirname $0);pwd)

shの理屈はよくわかってないのですが、どうやらこういうことのようです。

  1. かっこ()内はサブシェルになるらしく、cdしても外側には影響がない
  2. $は括弧内の出力を文字列として展開する

なるほどなるほど。

追記:

と、思ったんですが、$()が単にバッククオートと同じ動作をするということっぽいです。単純に左右の対応がとれるので、バッククオートを入れ子にするようなややこしい事をするよりは簡単みたい?