
zshのパス名展開
最近のMacのターミナルは、デフォルトではzshになっています。
bashと比べて新しく、高機能だそうです。
見た目の違いは、zshの場合はターミナルに出ているプロンプトが%、bashの場合は$になっているので見分けることができます。
自分の場合はLinuxでbashを使っているので、なんとなくMacもbashにしています(もともと入っているbashはライセンスの関係でバージョンが非常に古いので、homebrewで新しいものを入れています)。
先日Macでzshを使う機会があり、気がついたことがあったので記載しておきます。
例えば
FSLDIR=/usr/local/fsl
のような変数があるとします。これは$FSLDIR、もしくは${FSLDIR}のようにして、呼び出して使うことができます。exportしておけば、中身をいちいち書かなくてもいいので便利です。
さらにこれを別の変数に入れて、
xtract_data=${FSLDIR}/data/xtract_data/*
のような使い方もできます。(最後の*はワイルドカードといってそこにある全てのファイル、フォルダの名前に代わります。)
bashの場合
echo $xtract_data の出力は
/usr/local/fsl/data/xtract_data/Baby /usr/local/fsl/data/xtract_data/Human /usr/local/fsl/data/xtract_data/Macaque /usr/local/fsl/data/xtract_data/README /usr/local/fsl/data/xtract_data/standard /usr/local/fsl/data/xtract_data/template_qc_report.html
となります。
ところが、zshの場合は次のようになります。
echo $xtract_data
/usr/local/fsl/data/xtract_data/*
このように2重に変数を使うと展開してくれません。
そう言わずに展開してほしいなと思い、方法を探したところ、以下のサイトにあるオプションを見つけることができました。
参考:https://zsh.sourceforge.io/Doc/Release/Options.html#Expansion-and-Globbing
setopt GLOB_SUBST
zshのコマンドであるsetoptを使って上記のように設定すると
echo $xtract_data
/usr/local/fsl/data/xtract_data/Baby /usr/local/fsl/data/xtract_data/Human /usr/local/fsl/data/xtract_data/Macaque /usr/local/fsl/data/xtract_data/README /usr/local/fsl/data/xtract_data/standard /usr/local/fsl/data/xtract_data/template_qc_report.html
いい感じに展開してくれました。よしよし。
zshで変数を呼び出して、「あれ?思ったのと違う・・・」と思ったら試してみるとよいかもしれません。
ちなみに、もとに戻したいと思ったら
unsetopt GLOB_SUBST
で戻せます。
今何が設定されているかみたいと思ったら
setopt
で見ることができます。