| author | プレハブ小屋 <2386769+showa-yojyo@users.noreply.github.com> | |||
|---|---|---|---|---|
| created | 2026-07-28 | |||
| draft | true | |||
| tags |
|
|||
| title | Bash tilde expansion ノート |
| tilde prefix | expansion |
|---|---|
~ |
$HOME の値に等しい |
~fred |
fred の home directory の絶対パス |
~+ |
$PWD に等しい |
~- |
$OLDPWD かリテラル ~- に等しい |
~+N |
dirs +N が示す文字列に等しい |
~N |
同上 |
~-N |
dirs -N が示す文字列に等しい |
以下、ある文字が、引用符で囲まれておらず、escape されてもいない場合、その文字はむき出しであると表現する。
語がむき出しの ~ で始まる場合、その位置からむき出しの / の位置か、なければ語末までを tilde prefix という。
- tilde 展開の結果は引用符で囲まれたものと同様の扱いになる。置換の際、語分割やファイル名展開は起こらない。
- tilde 展開が失敗すると、元の文字列のまま残る(リテラル扱いになる)。
Bash は各変数への代入式において、むき出しの tilde prefix が次のいずれかの文字の直後にあるかどうかを調べる:
:- 最初の
=
発見した場合、tilde 展開を施す。
Note
この性質のおかげで、シェル変数 PATH や CDPATH に対する代入式において、tilde prefix を含むファイル名を利用できる。
Bash は tilde prefix 内の文字がいずれもむき出しの場合、その ~ に続く文字列をログイン名候補として扱う。
- Bash はこの文字列が空であるならば、
~を$HOMEに置き換える。 シェル変数HOMEが unset であるならば、実行者の home directory パスに展開する。 - ログイン名候補が空でないならば、Bash は tilde prefix をこのログイン名に関わる home directory パスに置き換える。
Bash は tilde prefix が
~+の場合、その部分を$PWDで置き換える。~-の場合、シェル変数OLDPWDが設定されていればその部分を$OLDPWDで置き換える。
さらに数 N を伴う場合も Bash は tilde prefix を特別に展開する。
~+Nや~-Nのような tilde prefix は directory stack の対応するパス要素に展開される。言い換えると、命令dirs +N実行時の移動先パスに展開される。- 符号のない
~Nのような tilde prefix は~+Nと同等に扱われる。
Note
適当にディレクトリーをいくつか pushd して dirs -v を見るがいい。
以上