2014-10-11 23 views
0

我有這樣的代碼執行罰款和正確zsh的外殼:的zsh - 迭代在腳本中使用參數匹配的文件

for f in ./A*.html; do; echo $f; done 

輸出

./Aliasing.html 
./Alternate-Forms-For-Complex-Commands.html 
./Alternative-Completion.html 
./Arguments.html 
./Arithmetic-Evaluation.html 
./Arithmetic-Expansion.html 
./Array-Parameters.html 
./Author.html 
./Availability.html 

然而,當我使用此代碼,但發送匹配字符串(./A*.html)作爲zsh函數中的參數,它將只顯示第一個文件

腳本:

displayy() { 
for f in $1; do; echo $f; done 
} 

命令:

%displayy ./A*.html 

輸出

./Aliasing.html 

我寧願期待相同的文件被打印出來在殼(第一實例)用於循環執行時。任何想法我做錯了什麼?古拉爵

回答

3

displayy ./A*.html命令的問題是,*由zsh的之前擴大其傳遞給dispayy功能。所以實際上你的命令如下:

$ displayy ./Aliasing.html ./Alternate-Forms-For-Complex-Commands.html ... 

然後在displayy打印只是第一個參數:./Aliasing.html

來解決這個問題最簡單的方法是在你displayy定義改變一個字符(1 =>@):

displayy() { 
for f in "[email protected]"; do; echo "$f"; done 
} 

這樣迭代循環遍歷所有display參數。另外,我建議把雙引號放在變量中作爲一個好習慣,即使在這個例子中文件名中沒有空格。

+0

謝謝您分享此信息。它幫助了,現在腳本起作用了。我很欣賞這個。祝你有美好的一天,先生。 :) – Jakub 2014-10-12 00:06:18

+1

請注意,在'zsh'中,'$ @'和'「$ @」'在默認設置下是相同的。 – chepner 2014-10-14 12:47:20

相關問題