Linux bash:通过连接N个字符串创建变量,其中N是脚本参数
假设我有一个bash脚本,Linux bash:通过连接N个字符串创建变量,其中N是脚本参数,linux,bash,shell,sed,awk,Linux,Bash,Shell,Sed,Awk,假设我有一个bash脚本,myscript.sh,它以两个数字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/sam
myscript.sh
,它以两个数字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
我正在努力创建以逗号分隔的文件列表,这些文件只作为输入。有没有一种好方法可以创建一个变量,将字符串/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
并没有像我所希望的那样给出a01b a02b a03b
,即使这样,我也不确定如何从中生成a01b,a02b,a03b
)。另一个障碍是我没有使用bash4,因此{00..09}
给出了一个非零填充的数字序列(这会导致问题)。我用Python开发了一个变通方法,但我希望能够在bash中实现,以避免调用外部脚本
感谢您的任何建议 如果我是你,我会看看内置的
printf
:
f=$(printf "/home/folder/sample%02d.R" $num)
如果你把它放在一个循环中,你将得到正确格式化的数字
要创建逗号分隔列表,只需将每个文件名附加到带有逗号的字符串:
files="$files, $f"
循环结束后,只需从字符串中删除第一个字符(它是多余的逗号),就完成了 您可以使用数字
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
N=3
s=“”
对于((n=1;nI将另一个答案选为我接受的答案,因为它包含了生成字符串所需的所有代码-但似乎这也可以,谢谢!