如何在不获取所有组合的情况下获取成对的大括号扩展?

How to get pairs of brace expansions without getting all combinations?

我在 macOS High Sierra 10.13.3 上工作。我的 shell 是 bash.

当我打字时,echo {1,2}{3,4}

我得到:13 14 23 24

是否可以选择只获得 13 24

我有兴趣创建许多文件,其中文件中的两个位置一起变化。例如,我想要文件:

file1file1 file2file2 file3file3

写成 file{1,2,3}file{1,2,3} option 代替 file1file1 file2file2 file3file3 会很方便。

我希望能够在命令中使用这个扩展,例如:

touch file{1,2,3}file{1,2,3} option 创建三个文件。

我希望我正在寻找的功能是明确的。

澄清

最终,我想在其中使用此功能的上下文是一个 snakemake 命令:

snakemake --cores 3 release{42,43,44}/file{42,43,44}.txt

我希望 snakemake 生成文件 release42/file42.txt、release43/file43.txt 和 release44/file44.txt.

如果我使用循环来实现,文件将连续生成。但是,通过键入 snakemake release42/file42.txt release43/file43.txt release44/file44.txt,将同时生成三个文件。但是,由于我很懒,我想输入比 snakemake release42/file42.txt release43/file43.txt release44/file44.txt.

更短的内容

得到 13 14 做

$ echo 1{3,4}

对于重复的,还有其他方法

$ for i in {1..3}; do printf "file%dfile%d " $i $i; done
file1file1 file2file2 file3file3

touch

一起使用
$ for i in {1..3}; do touch "file${i}file${i}"; done

或者,一次使用所有文件名

$ touch $(for i in {1..3}; do printf "file%dfile%d " $i $i; done)

使用循环构成数组

items=( )
for i in {42,43,44}; do
  items+=( "release$i/file$i.txt" )
done

snakemake "${items[@]}"

这只运行 snakemake 一次,列出所有文件。