2013-10-01 53 views
0

我創建了一個簡單的腳本來列出一堆文件夾中的內容。文件夾列表已從數據庫中提取,並且全部存在於系統中。

listOfFolders='/home/jca/List_of_folders.csv' 

for folder in `cat $listOfFolders` 
do 
    a=`expr substr $folder 1 2` 
    b=`expr substr $folder 3 2` 
    AbsolutePath=`printf $a'/'$b'/'$folder` 
    echo $AbsolutePath 
# ls $AbsolutePath 
done 

如果我運行該腳本,這樣我得到了正確的路徑,我想ls這樣每個文件夾:

37/88/37886 
38/28/38284 
38/35/38359 
15/74/15746 
38/78/38789 
38/79/38793 
38/93/38934 
38/93/38937 
38/94/38941 
39/17/39173 
40/38/40380 
39/36/39364 
39/75/39752 
39/83/39832 
39/91/39910 

如果我隨意拿起一條線,做一個ls和我預期的文件夾的所有內容。

當我發表意見echo $AbsolutePath並取消ls $AbsolutePath我得到的錯誤列表:

: No such file or directory 
: No such file or directory 

我敢肯定,這是正確的目錄,因爲當我在shell執行ls 39/91/39910我得到預期的結果。

請幫忙。

感謝,

+0

是不是有空格?可能在分配之前有一個導出。 –

+0

感謝大家的幫助。 問題是回車。 Alfe提到(printf「[%q] \ n」「$ AbsolutePath」)幫助我發現每個字符串後面都有一個'\ r'。 這是將其固定後,將所得的代碼:在'貓$ listOfFolders'爲夾 做 一個='EXPR SUBSTR $文件夾1 2' B ='EXPR SUBSTR $文件夾3 2' AbsolutePath ='的printf $ a'/'$ b'/'$ {folder {$'\ r'/}' #printf「[%q] \ n」「$ {AbsolutePath // $'\ r'/}」 # echo $ AbsolutePath ls「$ AbsolutePath」 done # – Lyhan

回答

1

你的經驗是奇怪的,也許你弄錯了什麼。如果echo的輸出正如您發佈的那樣,ls的輸出不應該是關於空字符串的錯誤消息(以冒號開頭)。

它可以幫助您在使用此調試你的東西:

printf "[%q]\n" "$AbsolutePath" 

,而不是簡單的回聲。注意引號!它們很重要。當使用變量的值時,幾乎總是應該使用雙引號,否則值中的空格和其他討厭字符具有(主要)不需要的效果。因此,更好地嘗試這個辦法:

ls "$AbsolutePath" 
+0

非常感謝。我現在可以看到的是什麼問題:[$ '40/38/40380 \ r'] [$ '39 /39364分之36\ r '] [$ '39 /39752分之75\ r'] [$ '39 /39832分之83\ r'] 可能是我需要擺脫的‘\ r’返回字符 – Lyhan

+0

歡迎的StackOverflow! :) – Alfe

0

'ls $AbsolutePath'"ls $AbsolutePath"是不一樣的,在裏面' ' $符號沒有任何權力

+0

我認爲你只是被OP的糟糕格式所迷惑。我現在解決了這個問題。 – Alfe

+0

謝謝,我感謝您的及時答覆。你說這是完全正確的,但在腳本中沒有任何影響。當我嘗試'ls $ AbsolutePath'時,如上所述,該變量將被忽略並以純文本形式輸出,而「ls $ AbsolutePath」會產生相同的錯誤。 – Lyhan

+0

@ user2833683,像阿爾菲一樣說我被這個問題的標題弄糊塗了,你在裏面有'ls $ blabla''...... – SteveL