2014-11-06 81 views
0

我想要做一些類似下面的循環來找到路徑中的所有「* e-0 [1-9]」目錄(1e-04 ,3e-07等等)。如果找到這樣的目錄,我想要執行一些命令。我的問題是如果條件,這給了我不同的錯誤使用shbash。我得到的sh的錯誤是「[:unexpected sequence」,對於bash是「[:too many arguments]」。我在stackoverflow的不同問題中發現了這個問題,但是這些問題主要與if條件中從「==」到「=」的轉換有關,在這裏不是這種情況。問題部分看起來像這樣:

for i in `seq 1 9`; 
do 
    directory=*e-0$i 
    // directory="*e-0"+$i // also tried things like that 
    if [ -d ${directory} ] // THIS is the line stated in the error 
    then 
     echo $directory 
    fi 
done 

在此先感謝。

+2

引用! 'if [-d「$ {directory}」]' – fedorqui 2014-11-06 12:54:08

回答

4

Use More Quotes™

if [ -d "$directory" ] 

還是一個簡單的方法整個循環:

shopt -s nullglob 
for directory in *e-0[1-9]/ 

這並不需要檢查,如果有一個匹配,因爲循環體將僅運行匹配路徑。尾部的斜線確保它只匹配目錄

+2

這個循環的好主意,但是除非你啓用了nullglob'shopt -s nullglob',否則檢查應該仍然存在。 – 2014-11-06 13:00:49

+0

感謝您的回答。 for循環完成了工作! @湯姆費內奇:是的,我將把支票留在那裏,如果沒有發現任何東西,請注意。 – 2014-11-06 13:11:32