Skip to content

Instantly share code, notes, and snippets.

@showa-yojyo
Created July 25, 2026 14:03
Show Gist options
  • Select an option

  • Save showa-yojyo/500a833243aaec0976c2ddb13fdb2660 to your computer and use it in GitHub Desktop.

Select an option

Save showa-yojyo/500a833243aaec0976c2ddb13fdb2660 to your computer and use it in GitHub Desktop.
WIP
author プレハブ小屋 <2386769+showa-yojyo@users.noreply.github.com>
created 2026-07-25
draft true
tags
bash
brace expansion
title Bash 中括弧展開ノート

Bash 中括弧展開ノート

中括弧展開を使って、始まりや終わりが同じであるが、相異なる文字列を書き出すことができる。

$ cp hello.txt hello.txt.bak
$ cp hello.txt{,.bak}

中括弧展開されるパターンの書式

preamble{csv}postscript
preamble{sequence-expr}postscript

ここで preamble および postscript は空文字列を含む任意の文字列であり、csv, で区切られた任意の文字列を並べた文字列とする。

例:

$ touch {README,INSTALL}.md
$ mkdir -p workspace/{bin,lib,src,obj}

sequence-expr.. を用いた表現で、次のどちらか:

first..last
first..last..incr

ここで first および last はそれぞれ文字または整数とする。

例:

$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
$ echo {01..10}
01 02 03 04 05 06 07 08 09 10
$ echo {1..10..2}
1 3 5 7 9
$ echo {10..1..-1}
10 9 8 7 6 5 4 3 2 1
$ echo {10..1..-2}
10 8 6 4 2

性質

  • 中括弧展開は左から右へ作用する
  • 中括弧展開は入れ子にすることが可能
  • 中括弧展開の結果は csv 部分の並び方を考慮する(勝手にソートすることはない)
  • 中括弧展開の優先度はきわめて高く、他の展開では特別文字である文字の特殊性が失せる
  • 中括弧展開され損なったパターンは全体としてリテラル文字列のように扱われる
  • 当たり前だが、${...} は中括弧展開ではなく単なる変数展開として扱われる
  • sequence-expr 方式において、C locale が用いられる
  • sequence-expr 方式において、incr を明示しない場合、firstlast の大小関係から 1-1 に決まる

無効化

組み込みコマンド setB フラグで中括弧展開機能の有無を切り替えることが可能だ。

  • set +o braceexpand と同じ
  • 既定では set -B であり、中括弧展開は有効だ。
  • 中括弧展開は古の sh との互換性を若干損なうので、場合によっては set +B する必要があるかもしれない。

complete-into-braces

ターミナルで M-{ を打鍵すると、Bash は現在のディレクトリーにあるファイル名の補完を実行し、候補一覧を {} で囲んでコマンド行に出力する。

例えばこんなディレクトリーにいるとして:

$ ls
bash-brace-expansion.md      fzf-cases.md                 using-bat.md
bash-filename-expansion.md   fzf-git.md                   using-eza.md
bash-history-expansion.md    gimp3.md                     using-fzf.md
bash-history-options.md      obs-studio-note.md           windows-11-note-1.md
bash-history-variables.md    packages-outside-winget.txt  windows-11-note-2.md
bash-parameter-expansion.md  packages.json                windows-11-note-3.md
bash-quoting.md              peekui.md                    windows10.md

using- まで打鍵して Alt+Shift+[ を押すと、コマンド行が次のように変化する:

$ using-{bat.md,eza.md,fzf.md}

もちろんこのような場合は中括弧式を手動で打鍵するのが早いが、状況によっては有用なのだろう。


以上

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment