見出し画像

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

で見ることができます。

いいなと思ったら応援しよう!