前端之家收集整理的这篇文章主要介绍了
如何使bash扩展变量中的通配符?,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在努力实现与打字相同的
效果
mv ./images/*.{pdf,eps,jpg,svg} ./images/junk/
在命令行,从一个bash脚本。我有:
MYDIR="./images"
OTHERDIR="./images/junk"
SUFFIXES='{pdf,svg}'
mv "$MYDIR/"*.$SUFFIXES "$OTHERDIR/"
当运行时,它给出了不是意外的错误:
mv: rename ./images/*.{pdf,svg} to ./images/junk/*.{pdf,svg}:
No such file or directory
引用这一切的正确方法是什么,以便mv实际上会做出所需的扩展? (是的,有很多文件匹配./images/中的模式。)
删除的答案在正确的轨道上。对您的尝试略作
修改:
shopt -s extglob
MYDIR="./images"
OTHERDIR="./images/junk"
SUFFIXES='@(pdf|eps|jpg|svg)'
mv "$MYDIR/"*.$SUFFIXES "$OTHERDIR/"
扩展扩展在变量扩展之前完成,但在扩展路径名之前进行扩展。因此,当变量在原始扩展中时,大括号仍然是大括号,但是当变量包含路径名元素时,当路径名扩展完成时,它们已经被扩展。