diff --git a/README.md b/README.md index d9987a7..89b95b2 100644 --- a/README.md +++ b/README.md @@ -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). -_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) - [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) +- [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 Some Command Line Editing](unix/undo-some-command-line-editing.md) - [Unrestrict Where ripgrep Searches](unix/unrestrict-where-ripgrep-searches.md) diff --git a/unix/type-fewer-paths-with-brace-expansion.md b/unix/type-fewer-paths-with-brace-expansion.md new file mode 100644 index 0000000..5bf813a --- /dev/null +++ b/unix/type-fewer-paths-with-brace-expansion.md @@ -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)