![大括号扩展与非排列列表 {txtfile,index}{1..3}.{txt,html} 我希望 `{txtfile,index}` 与 `{txt,html}` 相对应](https://linux22.com/image/199240/%E5%A4%A7%E6%8B%AC%E5%8F%B7%E6%89%A9%E5%B1%95%E4%B8%8E%E9%9D%9E%E6%8E%92%E5%88%97%E5%88%97%E8%A1%A8%20%7Btxtfile%2Cindex%7D%7B1..3%7D.%7Btxt%2Chtml%7D%20%E6%88%91%E5%B8%8C%E6%9C%9B%20%60%7Btxtfile%2Cindex%7D%60%20%E4%B8%8E%20%60%7Btxt%2Chtml%7D%60%20%E7%9B%B8%E5%AF%B9%E5%BA%94.png)
{txtfile,index}{1..3}.{txt,html}
我想{txtfile,index}
与{txt,html}
生产:
txtfile1.txt
txtfile2.txt
txtfile3.txt
index1.html
index2.html
index3.html
但这段代码将生成
我不想要的所有可能的组合txtfile1.html
,index1.txt
所以下面的代码不起作用。
{txtfile,index}{1..3}.{txt,html}
我只是认为相应的列表扩展会很好(它们的用例几乎总是与大括号扩展相结合)
语法可以是:{txtfile:index}{1..3}.{txt:html}
因为我们只需要长度为 2 或以上的列表的此功能,所以总会有:
所以我们知道它是一个相应的列表
这是一个非常长的使用 for 循环的解决方案和3线..
注意:此解决方案无法用于快速手动创建文件
fileNames=(txtfile index)
fileExtensions=(txt html)
for i in ${!fileNames[@]}; do echo ${fileNames[$i]}{1..3}.${fileExtensions[$i]}; done
一行复制粘贴:fileNames=(txtfile index); fileExtensions=(txt html); for i in ${!fileNames[@]}; do echo ${fileNames[$i]}{1..3}.${fileExtensions[$i]}; done
即使这很糟糕,它也做了 2 echo
,所以 2 行..(如果我想做的所有事情都touch
创建文件,它仍然有效)
txtfile1.txt txtfile2.txt txtfile3.txt
index1.html index2.html index3.html
答案1
你过度设计了这个:
txtfile{1..3}.txt index{1..3}.html
就是你所需要的。
答案2
列表
txtfile1.txt
txtfile2.txt
txtfile3.txt
index1.html
index2.html
index3.html
可以使用以下生成二大括号扩展:
txtfile{1..3}.txt
index{1..3}.html
例子:
$ printf '%s\n' txtfile{1..3}.txt index{1..3}.html
txtfile1.txt
txtfile2.txt
txtfile3.txt
index1.html
index2.html
index3.html
您可以将其写为单大括号扩展
{txtfile{1..3}.txt,index{1..3}.html}
但你不会从中得到任何好处。