Bash
從 bash 腳本將路徑和文件名傳遞給程序
我使用一個名為 mp3wrap 的實用程序,它將多個 mp3 組合成一個。假設我有一個目錄“album 1”,其中包含三個文件“track 1.mp3”、“track 2.mp3”和“track 3.mp3”。我將執行以下命令:
mp3wrap album\ 1.mp3 album\ 1/*.mp3
這會將“album 1”目錄(第二個參數)中的所有三個曲目組合成一個新文件“album 1.mp3”(第一個參數)。
我有一堆這樣的目錄,“專輯 2”、“專輯 3”等,我想編寫一個腳本來自動化這個過程。我試過這個:
for i in album* do mp3wrap $i.mp3 $i/*.mp3 done
但我得到了錯誤
1.mp3: No such file or directory
似乎我的腳本將 $i 擴展為“album 1.mp3”,它作為兩個單獨的參數傳遞。經過一番搜尋和閱讀,我最終得到了這個:
for i in album* do mp3wrap "${i}.mp3" "${i}/*.mp3" done
現在我沒有收到錯誤消息,而是從 mp3wrap 程序中獲得了“使用”頁面。很明顯,它接收參數的方式與我從命令行執行命令時的方式不同,而且我不知道如何檢查 bash 腳本執行時實際命令行的樣子。
我究竟做錯了什麼?任何幫助表示讚賞!
你離它很近。這是正確的程式碼:
for i in album* do mp3wrap "${i}.mp3" "${i}"/*.mp3 done
幾乎總是應該引用變數和參數以避免您的第一個問題。相反,shell globing 字元喜歡
*
和?
不應該,否則它們就失去了特殊意義。