mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 07:08:01 +00:00
Add Type Fewer Paths With Brace Expansion as a Unix TIL
This commit is contained in:
@@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
|
|||||||
|
|
||||||
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
||||||
|
|
||||||
_1517 TILs and counting..._
|
_1518 TILs and counting..._
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -1540,6 +1540,7 @@ _1517 TILs and counting..._
|
|||||||
- [Switch Versions of a Brew Formula](unix/switch-versions-of-a-brew-formula.md)
|
- [Switch Versions of a Brew Formula](unix/switch-versions-of-a-brew-formula.md)
|
||||||
- [Tell direnv To Load The Env File](unix/tell-direnv-to-load-the-env-file.md)
|
- [Tell direnv To Load The Env File](unix/tell-direnv-to-load-the-env-file.md)
|
||||||
- [Touch Access And Modify Times Individually](unix/touch-access-and-modify-times-individually.md)
|
- [Touch Access And Modify Times Individually](unix/touch-access-and-modify-times-individually.md)
|
||||||
|
- [Type Fewer Paths With Brace Expansion](unix/type-fewer-paths-with-brace-expansion.md)
|
||||||
- [Undo Changes Made To Current Terminal Prompt](unix/undo-changes-made-to-current-terminal-prompt.md)
|
- [Undo Changes Made To Current Terminal Prompt](unix/undo-changes-made-to-current-terminal-prompt.md)
|
||||||
- [Undo Some Command Line Editing](unix/undo-some-command-line-editing.md)
|
- [Undo Some Command Line Editing](unix/undo-some-command-line-editing.md)
|
||||||
- [Unrestrict Where ripgrep Searches](unix/unrestrict-where-ripgrep-searches.md)
|
- [Unrestrict Where ripgrep Searches](unix/unrestrict-where-ripgrep-searches.md)
|
||||||
|
|||||||
49
unix/type-fewer-paths-with-brace-expansion.md
Normal file
49
unix/type-fewer-paths-with-brace-expansion.md
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
# Type Fewer Paths With Brace Expansion
|
||||||
|
|
||||||
|
Bash has a feature called _brace expansion_ that allows us to do a kind of
|
||||||
|
shorthand when writing out file paths. We can specify multiple variants
|
||||||
|
comma-separated between curly braces and they'll each be expanded into separate
|
||||||
|
arguments.
|
||||||
|
|
||||||
|
It's easier to understand this by seeing it. If we type the following (don't
|
||||||
|
hit `Enter` yet):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ mkdir src/{one,two,three}
|
||||||
|
```
|
||||||
|
|
||||||
|
And then hit _Tab_:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ mkdir src/one src/two src/three
|
||||||
|
```
|
||||||
|
|
||||||
|
Bash uses the portion in braces to expand into separate arguments. The part
|
||||||
|
outside the braces gets reused for each. That's where we get some savings from
|
||||||
|
typing out the same path each time.
|
||||||
|
|
||||||
|
Here is another example where we use `mv` to rename a file deeply nested in our
|
||||||
|
project:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ mv projects/project1/src/app/utils/{names,constants}.js
|
||||||
|
```
|
||||||
|
|
||||||
|
We don't even have to _Tab_ it out. We can hit _Enter_ directly and `mv` gets
|
||||||
|
both arguments.
|
||||||
|
|
||||||
|
Similarly, how about we change the extension of our renamed file:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ mv projects/project1/src/app/utils/constants.{js,ts}
|
||||||
|
```
|
||||||
|
|
||||||
|
I've always found this feature most useful with paths and filenames, but you
|
||||||
|
can do brace expansion with any arguments.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ echo 1{3,1,6,4,9,2,7,5}
|
||||||
|
13 11 16 14 19 12 17 15
|
||||||
|
```
|
||||||
|
|
||||||
|
[source](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html)
|
||||||
Reference in New Issue
Block a user