如何在zsh别名中正确扩展文件名

时间:2014-01-10 18:38:46

标签: zsh

写了一个看似简单的别名来将mp3转换为wav,但是在运行时不会扩展文件。在我无法使其正常工作后将其更改为函数。

希望能够解释为什么它没有按照书面形式发挥作用。

  

alias 2wav =“for fn in * .mp3; do echo \”转换$ fn \“; avconv -y -i $ fn $ {$(basename $ fn .mp3)}。wav 2> / dev / null ;完成“

3 个答案:

答案 0 :(得分:0)

您的任何文件名是否包含空格?例如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

答案 1 :(得分:0)

解决(至少部分)。

alias 2wav =' for fn in * .mp3; do echo"转换$ {fn}&#34 ;; avconv -y -i $ {fn} $ {$(basename $ {fn } .mp3)}。wav 2> / dev / null;已完成'

不确定为什么要修复它但我用单引号括起命令并在变量周围添加括号并且它只是起作用。确实,文件名中的空格仍然是一个潜在的问题。我不得不试验一下。

答案 2 :(得分:0)

解决。

alias 2wav ='for fn in * .mp3; do echo“Converting $ {fn}”; avconv -y -i“$ {fn}”“$ {$(basename”$ {fn}“。mp3) }。“wav 2> / dev / null; done'

现在适用于包含空格的文件名。我猜测单引号会阻止扩展直到运行时发生,这就是为什么这样做的原因。

欢迎任何澄清......