Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux bash:通过连接N个字符串创建变量,其中N是脚本参数_Linux_Bash_Shell_Sed_Awk - Fatal编程技术网

Linux bash:通过连接N个字符串创建变量,其中N是脚本参数

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

假设我有一个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/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将另一个答案选为我接受的答案,因为它包含了生成字符串所需的所有代码-但似乎这也可以,谢谢!