2025年04月01日13時13分 / 提供:マイナビニュース
前回の続きで、シェルオプションを解説する。表01は、シェルオプションを筆者が分類したもので、以後これに沿って解説を行う。なお、前回記事で表01としたものとは、分類が異なるオプションがある。
展開
bashで「展開」(Expantion)とは、bashがコマンドラインを受付、スペースなどの区切り文字で単語を認識したあと、一定のルールに従い、引数を置換していく処理をいう。bashには、7つの展開処理がある(表02)。
表03のシェルオプションは、展開時の振る舞いを制御するもの。これらのうち、わかりにくいのは「assoc_expand_once」、「extglob」、「extquote」の3つだろう。
「assoc_expand_once」は、連想配列(declear -Aで作成)の添え字に対しての展開処理を一回のみに限定するかどうか指定するもの。写真01に、その振る舞いを示す。
これを有効にすると、連想配列の評価は1回だけしか行われない。ただし、この設定が有効なのは、「算術式の評価中」、「変数代入が可能な組み込み関数の実行中」、「参照外し(参照元から参照先の値を得ること)を行う組み込み関数の実行中」の3つ場合に限られる。デフォルトでオフであり、有効にしてしまうと、既存のシェルスクリプトなどの実行に大きな影響が出る可能性がある。
「extglob」は、パス名展開の機能を拡張する。標準では、パス名展開は、いわゆるワイルドカード(*と?)および角カッコを使う文字クラスがパターン指定に使えるのみだが、このオプションを有効にすると、表04の表記が利用できるようになる。
「extquote」は、パメラータ展開で、$'……'で囲まれた部分のANSIエスケープ文字の解釈を有効にする。
パラメータ展開とは、$に続くパラメータ名を展開することで、たとえば、「$変数名」、あるいは「${変数名}」とすることで変数名を変数の値に「パラメータ展開」することができる。
ANSIエスケープ文字とは、逆スラッシュとアルファベット1文字で表現される制御文字などをさす(表05)。
extquoteは、このパラメーター展開中に出現する$'……'の解釈を変える(写真02)。$'……'では、通常(パラメータ展開の外)では、内部にあるANSIエスケープ文字を解釈するが、パラメーター展開の波括弧の中では、展開が行われない。このオプションはこの挙動を変えるもので、有効にするとエスケープ文字を解釈する。
補完
bashの補完とは、コマンドラインでコマンドや引数、オプションなどの綴りの先頭部から残りの部分を推測して入力するものだ。補完自体については、別の機会に解説する。表06は、補完関連のシェルオプションである。このうちわかりにくいのは、「dirspell」、「force_fignore」、「hostcomplete」、「progcomp」だろう。
「force_fignore」は、シェル変数(環境変数)FIGNOREに指定されたファイル名、ディレクトリ名の末尾パターン(コロン区切りで複数指定可)を、パス名補完から除外するもの。ただ、Ubuntu 24.04LTSに付属してたbash ver.5.2.21(1)-release (x86_64-pc-linux-gnu)では、このオプションを無効にしてもFIGNOREに指定された末尾パターンは無視されたままだった。
「dirspell」は、文字抜けなどの基本的なスぺルミスを訂正するもの。ただし、このオプションを有効にするには、同時に「direxpand」を有効にしておく必要がある。両者が同時に有効になっているとき、指定したパスの一部であるディレクトリ名の綴りが間違っている場合に、これを訂正してフルパスに変換する(写真03)。
「progcomp」は、プログラマブル補完を有効にするもの。プログラマブル補完は、ユーザーが定義した補完方法で、bash組み込みコマンド以外のユーザー作成アプリケーションなどでも補完機能が利用できるようにするものだ。completeコマンドなどで定義を行うことができるが、標準的なLinuxコマンドに関しては補完情報が定義されている。この機能は、少し大がかりな機能なので詳細の解説は別の機会に譲ることにする。このオプションは、そのプログラマブル補完の有効、無効を切り替えるもの。
「hostcomplete」は、@で始まる単語をホスト名の一部として補完を行う。これをホスト名展開という。ホスト名補完では、対象となるホスト名は、/etc/hostsファイルから検索される。
ただし、Linuxの多くの外部コマンドは、プログラマブル補完機能があり、コマンドごとに補完パターンを定義しているため、ホスト名展開を使わずとも、引数がホスト名になるようなコマンド(たとえばsshなど)では、ホスト名を補完できる。
プログラマブル補完によるホスト名の補完とホスト名補完の違いは、先頭の@の有無で、ホスト名補完の場合には、補完後、先頭の@は消去される。
履歴
履歴(ヒストリ)機能は、過去に入力したコマンドラインを編集、再実行するための仕組みである。ヒストリ関連のオプションを表07に示す。ここでわかりにくいオプションは、「cmdhist」と「lithist」だ。この2つは対になっていて、複数行に別れるコマンドラインを履歴に登録するときにどうするかを指定するもの。
cmdhistが有効でlithistが無効の場合、複数行に別れたコマンドラインは、セミコロンでつなげて1つの履歴エントリになる(写真04)。
cmdhist、lithistがともに有効だった場合、履歴エントリには、改行を使って登録が行われる。
どちらも無効の場合、ぞれぞれの行が単独で履歴エントリに登録される。
一番解りやすいのは、cmdhist、lithistをともに有効にすることだが、cmdhistのみを有効にしてlithistを有効にすると、履歴エントリが1行になるため、履歴リストが見やすくなる。
次回は、シェルオプションの残り、「その他」カテゴリに属するものを解説する。
≫ Windows Subsystem for Linuxガイド 連載バックナンバー
https://news.mynavi.jp/tag/winsubsystem/