如何在不获取所有组合的情况下获取成对的大括号扩展?
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
一次,列出所有文件。
我在 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
一次,列出所有文件。