假设我有一个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的函数?
我已成功使用01,02,03
创建一个保留seq
的变量,但无法弄清楚如何将文件路径附加到这些数字。 (由于在变量评估之前支撑扩展发生这一事实,我陷入困境 - 因此,设置X = 'seq -f %02.0f 1 $N'
并且执行a{$X}b
而不是会给{{1}正如我所希望的那样,即使它确实如此,我也不确定如何从中产生a01b a02b a03b
。)。另一个障碍是我没有使用bash 4,所以a01b,a02b,a03b
给出了一系列非零填充的数字(导致问题)。我使用Python开发了一种解决方法,但我希望能够在bash中完成它以避免调用外部脚本。
赞赏所有建议!
答案 0 :(得分:1)
您可以使用数字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
答案 1 :(得分:0)
如果我是你,我会看一下内置的printf
:
f=$(printf "/home/folder/sample%02d.R" $num)
如果你把它放在一个循环中,你将得到正确格式化的数字。
要创建以逗号分隔的列表,您只需将每个文件名附加到带逗号的字符串:
files="$files, $f"
在循环之后,你只需要从字符串中删除第一个字符(它是一个多余的逗号),然后你就完成了。