假设我有一个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"
循环后,您只需要从字符串中删除第一个字符(这是剩余的逗号),就完成了。