You often see the following commands on blogs or forums: brace expansion {} shell is extended with braces
cp /etc/httpd/httpd.{,.bakup}
Or
mv resume{z,}.doc
So what does it mean in the UINX / Linux} shell command? What does it do?
{} has no practical meaning, but it can often be used to generate various groups as brace expansion (brace extension or curly bracket extension). The following is a translation from GNU / bash man page:
Brace expansion is a mechanism used to randomly generate string combinations. This mechanism is similar to the extension of a file, but there is no need for a responsive file. The brace expansion mode is an optional preamble followed by a series of comma separated strings contained in a pair of curly braces, followed by an optional postscript (print programming language). Preamble (leading character) is added before each string in curly braces, and postscript (print programming language) is appended to each result string and expanded from left to right. Curly bracket extensions can be nested. The result of the extended string is not sorted; It retains the order from left to right.
1. If necessary, enter the following command in the terminal:
echo foo{1,2,3}.txt
The output is as follows:
foo1.txt foo2.txt foo3.txt
2. You can also use the following additional examples to “create” a parameter in the command to save input time and improve work efficiency:
echo file.txt{,.bak}
echo file-{a..d}.txt
echo mkdir -p /apache-jail/{usr,bin,lib64,dev}
echo cp httpd.conf{,.backup}
echo mv delta.{txt,doc}
3. You can use brace expansion (brace extension or curly bracket extension) to copy, rename files, backup files, or create directories. In the following habitually used example, use file1 Txt file 2 txt. Bak, enter:
cp -v file1.txt file1.txt.bak
If you use brace expansion to save time, enter:
cp -v file1.txt{,.bak}
The output is as follows:
file1.txt -> file1.txt.bak
More examples of brace extensions are as follows:
4. If we implement:
$ cp /etc/apt/sources.list /etc/apt/sources.list.bak
The two / etc / apt / sources sections are the same. In order to input / etc / apt / sources twice less, the parameter is extended with braces. In addition, when renaming, backing up files and creating links, you can use braces to expand parameters to improve efficiency.
Braces extension, that is, the parameters surrounded by braces and separated by commas will be extended to multiple independent parameters.
$ cp /etc/apt/sources.{list,list.bak}
When interpreting, the shell will automatically expand the following parameters into two, which will become the same complete command as above.
Of course, it can be simpler. Take “list” into account and write nothing before comma, as follows:
$ cp /etc/apt/sources.list{,.bak}
In this way, if there is nothing in front of the comma, the parameters will remain unchanged, and the parameters behind the comma will be expanded as before.