如何在不获得所有组合的情况下获得支撑扩展对?

问题描述 投票:5回答:2

我在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创建三个文件。

我希望我正在寻找的功能是清楚的。

Clarification

最终,我想要使用此功能的上下文是使用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更短的东西。

bash unix snakemake
2个回答
3
投票

得到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)

3
投票

使用循环来形成一个数组。

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

snakemake "${items[@]}"

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

© www.soinside.com 2019 - 2024. All rights reserved.