逗号 ',' 运算符的含义,用于在 Unix 中连接字符串

逗号 ',' 运算符的含义,用于在 Unix 中连接字符串
$ 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*

相关内容