gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:42:52 27 4
gpt4 key购买 nike

我正在尝试实现与打字相同的效果

mv ./images/*.{pdf,eps,jpg,svg} ./images/junk/  

在命令行中,从 bash 脚本中。我有:

MYDIR="./images"
OTHERDIR="./images/junk"
SUFFIXES='{pdf,eps,jpg,svg}'
mv "$MYDIR/"*.$SUFFIXES "$OTHERDIR/"

它在运行时给出了意想不到的错误:

mv: rename ./images/*.{pdf,eps,jpg,svg} to ./images/junk/*.{pdf,eps,jpg,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 - 如何使 bash 扩展变量中的通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4691956/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com