$ ls -ltr /{,usr/}bin/l*|tail -4
-r-xr-xr-x 1 root bin 31544 Dec 20 2017 /usr/bin/login
-r-xr-xr-x 1 root bin 31544 Dec 20 2017 /bin/login
lrwxrwxrwx 1 root root 15 Aug 28 2018 /usr/bin/libpng-config -> libpng12-config
lrwxrwxrwx 1 root root 15 Aug 28 2018 /bin/libpng-config -> libpng12-config
l
这给出了以字母in/usr/bin
和/bin
目录开头的所有可执行文件的名称。
如果我通过改变它的位置来玩,,
我会得到我不理解的结果。例如,请参阅下面的屏幕截图。
$ ls -ltr /{,usr,/}bin/l*|tail -4
/usrbin/l*: No such file or directory
-r-xr-xr-x 1 root bin 31544 Dec 20 2017 /bin/login
-r-xr-xr-x 1 root bin 31544 Dec 20 2017 //bin/login
lrwxrwxrwx 1 root root 15 Aug 28 2018 /bin/libpng-config -> libpng12-config
lrwxrwxrwx 1 root root 15 Aug 28 2018 //bin/libpng-config -> libpng12-config
与上面相同(列表顺序已更改)但usr
缺少。
$ ls -ltr /{usr,/}bin/l*|tail -4
/usrbin/l*: No such file or directory
-rwxr-xr-x 1 root other 2286 Jun 15 2017 //bin/libpng14-config
-r-xr-xr-x 1 root bin 28608 Oct 20 2017 //bin/ldaplist
-r-xr-xr-x 1 root bin 31544 Dec 20 2017 //bin/login
lrwxrwxrwx 1 root root 15 Aug 28 2018 //bin/libpng-config -> libpng12-config
这是仅存在于 /bin 中的文件,/
每个条目都有额外的前缀。
请说明一下正在施展什么样的魅力,
。
答案1
大括号被逗号之间的每个字符串替换,因此
X{,a,b}Y
扩展为XY XaY XbY
,因此 your/{usr,/}bin/l
扩展为/usrbin/l* /bin/l*
,而不是/usr/bin/l*
像您预期的那样。
/{,usr/}bin/l* #-> /[]bin/l* /[usr/]bin/l*
/{,usr,/}bin/l* #-> /[]bin/l* /[usr]bin/l* /[/]bin/l*
/{usr,/}bin/l* #-> /[usr]bin/l* /[/]bin/l*