bash:通过串联n字符串来创建变量,其中n是脚本参数



假设我有一个bash脚本myscript.sh,它以2个数字为n和p作为参数 - 即,我会像这样运行: sh myscript.sh 3 4

在脚本中,我想运行一个程序,该程序将逗号分隔的文件列表作为参数。N表示该列表中的元素数量。我需要构建此文件路径列表,该列表由从1到N的样本号区分开。示例更容易看到:

#!/bin/sh
myProgram -p $1 -f /home/folder/sample01.R,/home/folder/sample02.R,/home/folder/sample03.R 

我正在努力创建仅给出N(3)作为输入的文件列表。是否有一个很好的方法来创建一个将字符串/home/folder/sample01.R,/home/folder/sample02.R,/home/folder/sample03.R作为3的函数的变量?

我已经成功地使用seq创建了一个变量持有01,02,03,但是无法弄清楚如何将文件路径附加到这些数字上。(由于撑杆扩展发生在变量评估之前 - 因此,设置x = 'seq -f %02.0f 1 $N'并执行 a{$X}b do 给出a01b a02b a03b,即使它确实确实如此,我不确定如何从中生成a01b,a02b,a03b。)。另一个障碍是我不使用bash 4,因此{00..09}给出了一系列不是零填充的数字(导致问题)。我使用Python开发了一个解决方法,但我很想能够以bash的速度做到这一点,以避免不得不调用外部脚本。

所有建议都赞赏!

您可以使用像这样的数字N构造字符串:

N=3
s=""
for ((n=1; n<=N; n++)); do
    [[ -n "$s" ]] && s="$s,"
    printf -v s "%s/home/folder/sample%02d.R" "$s" "$n"
done
echo "$s"
/home/folder/sample01.R,/home/folder/sample02.R,/home/folder/sample03.R

如果我是你,我会看一下内置的printf

f=$(printf "/home/folder/sample%02d.R" $num) 

如果将其放在循环中,则将具有正确格式的数字。

要创建逗号分隔列表,您可以将每个文件名附加到带有逗号的字符串:

files="$files, $f"

循环后,您只需要从字符串中删除第一个字符(这是剩余的逗号),就完成了。

相关内容

  • 没有找到相关文章