請看下面的代碼:
#!/bin/sh
set -x
find `pwd` -name "file.ext" -exec echo $(dirname {}) \;
set -x
展示瞭如何擴建工程和最後的命令是什麼。運行時,它會產生以下輸出:
++ pwd
++ dirname '{}'
+ find /home/kibab -name file.ext -exec echo . ';'
因此,首先擴展的是pwd
。其次是$(dirname {})
。這兩個命令的結果將被放入find命令中。因此,你告訴找到-exec echo .
,所以你看到了預期的輸出。
當你替換basename
爲dirname
,擴張仍然需要的地方,但擴張的結果是不同的:
pwd
擴展到當前路徑。在我上面的例子中,結果是/home/kibab
basename {}
被執行。該命令的結果是{}
。
find命令在執行上述替換操作後執行。執行最後的命令如下:
find /home/kibab -name '*.png' -exec echo '{}' ';'
在檢查上面的命令,你會發現,命令現在簡單地附和任何文件被發現的。
也許你想要這樣的東西?
find `pwd` -name "file.ext" -printf "%f\n"
@馬丁 - 好一點,解釋補充說。 – 2010-03-11 23:19:04
這幫了一大筆錢。我不知道設置-x,並且我使用basename/dirname的唯一上下文是當我將它設置爲變量時。 – temp2290 2010-03-12 15:29:14
你可能想看看'set -v'和一些其他選項。祝你好運。 – 2010-03-12 16:33:00