无法在mv命令中使用此变量

时间:2019-01-10 20:45:53

标签: bash shell variables debian

我正在尝试使用此变量

MediaExt="*.{mp4,mkv,avi}"

在此命令中

mv ${MediaSource}/${MediaExt} ${UploadDir}

但它似乎不起作用。

有人可以帮我吗?谢谢!

1 个答案:

答案 0 :(得分:1)

bash中的命令经过多次解析。决定是否应执行通配符(扩展*或*。{mp4,mkv,avi})的过程是在扩展变量的过程之前进行的。扩展变量后,就有候选对象可以使用,但已经做出不需要使用对象的决定

如果将表达式写为:

mv ${MediaSource}/*.{mp4,mkv,avi} ${UploadDir}

您可能会发现一些建议,可以使用eval请不要!
这个:

eval mv ${MediaSource}/${MediaExt} ${UploadDir}

将按预期执行,但是如果您不控制变量的值,eval可能会很危险。例如,如果可以将UploadDir设置为:

UploadDir="somedirectory; rm -rf ~"

然后eval将作为两个语句执行您的请求并删除您的所有文件。