寫了一個看似簡單的別名,將mp3轉換爲wav,但不會在運行時擴展文件。在我無法工作後將其更改爲功能。如何正確擴展zsh別名中的文件名
希望能解釋爲什麼它沒有按照書面的方式工作。
別名2wav = 「用於* .MP3 FN;做回聲\」 轉換$ FN \「; avconv -y -i $ FN $ {$(基名$ FN .MP3)} WAV 2>/dev/null; done「
寫了一個看似簡單的別名,將mp3轉換爲wav,但不會在運行時擴展文件。在我無法工作後將其更改爲功能。如何正確擴展zsh別名中的文件名
希望能解釋爲什麼它沒有按照書面的方式工作。
別名2wav = 「用於* .MP3 FN;做回聲\」 轉換$ FN \「; avconv -y -i $ FN $ {$(基名$ FN .MP3)} WAV 2>/dev/null; done「
是否有任何文件名包含空格?例如foo bar.mp3
將產生
avconv -y -i foo bar.mp3 foo bar.wav
^^^---input file, doesn't exist
^^^^^^^--output file, but since there's no input, it's useless
^^^^^^^^^^--- miscellaneous unknown/invalid arguments
命令行您將需要圍繞參數報價:
alias ........ -y -i "$fn" "${$(basename .....}".wav
解決(至少部分)。
alias 2wav ='for fn in * .mp3; do echo「Converting $ {fn}」; avconv -y -i $ {fn} $ {$(basename $ {fn} .mp3)} .wav 2 >/dev/null; done'
不知道爲什麼這個固定它,但我用單引號括住了命令,並在變量中添加了大括號,並且它工作正常。確實文件名中的空格仍然是潛在的問題。我必須試驗一下。
已解決。
alias 2wav ='for fn in * .mp3; do echo「Converting $ {fn}」; avconv -y -i「$ {fn}」「$ {$(basename」$ {fn}「.mp3 )}「.wav 2>/dev/null; done'
現在適用於包含空格的文件名。我猜測單引號會阻止擴展發生,直到運行時,這就是爲什麼這個工程。
歡迎澄清...