繁体   English   中英

在 bash 脚本中编辑循环仅运行 3 个文件

[英]editing loop in bash script to only run over 3 files

我之前没有真正使用过 bash,所以我不确定如何操作代码以供我使用。

我有以下内容:

cmd=""
for i in {1..22}
do
  bgenix -g file1${i}_t.bgen -incl-range list.txt > c${i}.bgen
  cmd=$cmd"c${i}.bgen "
done

但是我只需要对 22 个文件中的 3 个执行此操作。

我可以使用下面的代码吗

for i in {1, 3, 17}

到 select 只有这些文件吗?

谢谢!

如下删除花括号应该可以:

for 1 3 17 ; do
    bgenix -g file1${i}_t.bgen -incl-range list.txt > c${i}.bgen
    cmd=$cmd"c${i}.bgen "
done

既然你说你是 bash 的新手,我也只是指出我发现的一个小问题。

默认情况下,bash 解释器将空格视为字段分隔符。 因此,如果您的cmd变量中有空格字符,并且您重用它,bash 将进行分词,这可能会给您带来一些意想不到的结果。 为了保留和处理空格字符,您必须小心地在整个分配的部分上使用双引号。

实际上,即使变量尚不包含空格(或任何其他未知的未来字段分隔符),这样做也是一个好习惯。 所以,

cmd=""
for i in 1 3 17
do
  bgenix -g file1"${i}"_t.bgen -incl-range list.txt > c"${i}".bgen
  cmd="${cmd}c${i}.bgen "
done

您可能会问,为什么要双引号"${i}" 这都是关于好习惯的。

此外,您的案例准确地说明了为什么使用花括号。 没有它们 bash 将寻找一个名为$cmdc的变量。 祝你好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM