【发布时间】:2019-01-10 20:45:53
【问题描述】:
我正在尝试使用这个变量
MediaExt="*.{mp4,mkv,avi}"
在这个命令中
mv ${MediaSource}/${MediaExt} ${UploadDir}
但它似乎不起作用。
有人可以帮帮我吗?谢谢!
【问题讨论】:
-
什么不起作用?您是否移动了错误的文件?你有错误吗?如果你只是做
echo ${MediaSource}/${MediaExt}你会得到什么? -
它给了我这个:
/home/me/media/downloaded/testevid/*.{mp4,mkv,avi} /home/me/media/upload。但是,它根本不会移动文件。如果我改用mv ${MediaSource}/*.{mp4,mkv,avi} ${UploadDir},它可以工作。这不是灾难性的,因为我可以找到并替换所有内容,但我想了解发生了什么。 -
那个 glob 真的匹配任何东西吗?如果 glob 表达式不匹配任何文件,它将扩展为自身。
-
"glob" 作为动词意味着将字符串扩展为一组文件名匹配。这就是您的 shell 如何将
/home/me/media/downloaded/testevid/*.{mp4,mkv,avi}之类的内容转换为一组文件名以传递给目标进程(在本例中为mv)。如果 globbing 进程不匹配任何文件,而不是返回一个空参数,它会扩展到自身。因此,mv不会得到一组文件,而是得到一个与任何文件都不匹配的字符串。 -
变量替换后大括号不展开。
标签: bash shell variables debian