如何使bash扩展变量中的通配符?

前端之家收集整理的这篇文章主要介绍了如何使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/"

扩展扩展在变量扩展之前完成,但在扩展路径名之前进行扩展。因此,当变量在原始扩展中时,大括号仍然是大括号,但是当变量包含路径名元素时,当路径名扩展完成时,它们已经被扩展。

猜你在找的Bash相关文章