我对bash的大括号扩展有一个简单的问题:
#!/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.jpg x2.jpg x3.jpg y1.png y2.png
我该怎么办?
答案 0 :(得分:5)
直截了当的方式是
#!/bin/bash
for i in {x1,x2,x3}.jpg {y1,y2}.png; do
echo $i
done
答案 1 :(得分:3)
在分析行时执行括号扩展,并且不会在引号内发生。
答案 2 :(得分:1)
在评估命令时,对参数执行括号和通配符扩展。将第一行更改为:
PICS=$(echo {x1,x2,x3}.jpg {y1,y2}.png)
答案 3 :(得分:0)
这些文件已经存在?如果是,你可能想要一个(ext)glob。例如。
printf '%s\n' [xy]+([[:digit:]]).@(jp|pn)g
Bash中的Brace扩展是第一个扩展步骤。它主要发生在不带引号的上下文中,尽管确切的规则很复杂。除非您稍后评估结果,否则不能将其存储在字符串中。
printf '%s\n' {x{1..3}.jp,y{1,2}.pn}g
无论你觉得如何,都可以定义。有关较少混淆的选项,请参阅其他答案。
您还需要引用您的扩展。