前言
首先吐槽一下,通過百度出來的東西,很多寫的都沒有什麼深度和內涵。很多寫shell教程的人,採用的都是線性的思維方式,給出一個命令介紹,後面跟上實例介紹,採用的是“學->用”的思維模式。這種模式屬於最低級最不科學的學習方式。絕大多數人習慣於用線性思維來思考,但是這個世界卻是一個多維、非線性的空間。本文的內容採用的非線性的思維方式,充分發揮想象和聯想,以左右逢源的方式貫穿shell的四面八方。
1、exec 簡介
exec 是一個內置命令,位高權重,甚至比 find 等級還高。exec 可以調用並執行其他的指令,類似這樣的場景---exec ls,比 find 更有權勢,但是 exec 卻常常當做 find 的小跟班,被人視為 find 命令的一個選項,下面的場景大家應該不陌生吧:
2、exec 用法迷霧
但是,對於上述這個命令很多人搞不明白,尤其是後半部分,常常被大括號所迷惑。簡單的來說,在這裡大括號{}用於代替查找到的文件。一句話點醒夢中人,眾人恍然大悟。可是等用 exec 的時候,往往還是記不住它的使用規範,歸根到底還是因為我們沒有深入的挖掘大括號的內涵。
其實理解了大括號的內涵,那能熟練的使用 exec。大括號{}是有內涵的,它通常用來表示集合,所以在上述命令中代替查找到的文件集合,也是理所當然的。這就是為什麼上面命令用大括號{},而不是用中括號[]、小括號()的原因。
3、大括號內涵
深入挖掘一下,你會發現大括號的學問還是挺多的。在數學領域,大括號表示集合,在shell裡面延續了集合這個內涵,而且把集合這個東西發揮的淋漓盡致。在 shell 裡面,集合的種類多種多樣,百花鬥豔:
(1)文件的集合。大括號用於代替查找到的文件,如下所示:
(2)數字的集合。大括號用於創建序列,如下所示:
(3)字符的集合。大括號用於擴展字符串,如下所示:
(4)指令的集合。大括號用於標識動作指令,例如:awk的{action}