bash';s支架扩展没有';行不通
我对bash的brace扩展有一个简单的问题:bash';s支架扩展没有';行不通,bash,brace-expansion,Bash,Brace Expansion,我对bash的brace扩展有一个简单的问题: #!/bin/bash PICS="{x1,x2,x3}.jpg {y1,y2}.png" for i in $PICS do echo $i done 但结果是: {x1,x2,x3}.jpg {y1,y2}.png 但是我想要的结果是:x1.jpgx2.jpgx3.jpgy1.png y2.png 我该怎么办?大括号扩展是在分析行时执行的,不会发生在引号内。大括号扩展是在分析行时执行的,不会发生在引号内。在计算命令
#!/bin/bash
PICS="{x1,x2,x3}.jpg {y1,y2}.png"
for i in $PICS
do
echo $i
done
但结果是:{x1,x2,x3}.jpg
{y1,y2}.png
但是我想要的结果是:x1.jpgx2.jpgx3.jpgy1.png y2.png
我该怎么办?大括号扩展是在分析行时执行的,不会发生在引号内。大括号扩展是在分析行时执行的,不会发生在引号内。在计算命令时对参数执行大括号和通配符扩展。将第一行更改为:
PICS=$(echo {x1,x2,x3}.jpg {y1,y2}.png)
计算命令时,将对参数执行大括号和通配符扩展。将第一行更改为:
PICS=$(echo {x1,x2,x3}.jpg {y1,y2}.png)
直截了当的方法是
#!/bin/bash
for i in {x1,x2,x3}.jpg {y1,y2}.png; do
echo $i
done
直截了当的方法是
#!/bin/bash
for i in {x1,x2,x3}.jpg {y1,y2}.png; do
echo $i
done
这些是已经存在的文件吗?如果是,您可能需要一个(ext)glob。例如
printf '%s\n' [xy]+([[:digit:]]).@(jp|pn)g
Bash中的大括号扩展是第一个扩展步骤。它主要发生在无引号的上下文中,尽管确切的规则很复杂。除非稍后对结果求值,否则不能将其存储在字符串中
printf '%s\n' {x{1..3}.jp,y{1,2}.pn}g
这些可以根据你的感觉来定义。请参阅其他答案,以了解较少混淆的选项
您还需要引用扩展名。这些是已经存在的文件吗?如果是,您可能需要一个(ext)glob。例如
printf '%s\n' [xy]+([[:digit:]]).@(jp|pn)g
Bash中的大括号扩展是第一个扩展步骤。它主要发生在无引号的上下文中,尽管确切的规则很复杂。除非稍后对结果求值,否则不能将其存储在字符串中
printf '%s\n' {x{1..3}.jp,y{1,2}.pn}g
这些可以根据你的感觉来定义。请参阅其他答案,以了解较少混淆的选项
您还需要引用展开式。更一般地说,无论是否引用,都不会在作业的右侧执行大括号展开;但是大括号扩展是对数组赋值中的值执行的。更一般地说,大括号扩展不是对赋值的RHS执行的,不管它是否被引用;但是对数组赋值中的值执行大括号扩展。或者
PICS=({x1,x2,x3}.jpg{y1,y2}.png);对于“${PICS[@]}”中的i;做完成
或PICS=({x1,x2,x3}.jpg{y1,y2}.png);对于“${PICS[@]}”中的i;做完成