Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
如何在shell脚本中将数组列表转换为逗号分隔的单个变量_Shell_Unix - Fatal编程技术网

如何在shell脚本中将数组列表转换为逗号分隔的单个变量

如何在shell脚本中将数组列表转换为逗号分隔的单个变量,shell,unix,Shell,Unix,我有一个数组,如下所示 data=(1,2,3,4,5) ${data[*]} 输出: 1,2,3,4,5 123445 上面的输出类似\n 我只想使用for循环并在变量中附加每个值,以逗号分隔,如下所示: testData=1,2,3,4,5 如果您的输入确实是一个数组,您知道如何仅使用FOR-loop-in-shell脚本来实现这一点吗 data=( 1 2 3 4 5 ) …将其转换为逗号分隔的值列表可能如下所示: testData=$(IFS=,; printf '%s\n'

我有一个数组,如下所示

data=(1,2,3,4,5)

${data[*]}
输出:

1,2,3,4,5
123445

上面的输出类似\n

我只想使用for循环并在变量中附加每个值,以逗号分隔,如下所示:

testData=1,2,3,4,5
如果您的输入确实是一个数组,您知道如何仅使用FOR-loop-in-shell脚本来实现这一点吗

data=( 1 2 3 4 5 )
…将其转换为逗号分隔的值列表可能如下所示:

testData=$(IFS=,; printf '%s\n' "${data[*]}")
…或者,更注重效率:

printf -v testData '%s,' "${data[@]}"
testData=${testData%,}
之后,

echo "$testData"
将发出:

1,2,3,4,5
使用bash和:

输出:

1,2,3,4,5

显示declare-p数据的输出。因为注释的格式很糟糕,所以您需要提问并将输出放在那里。根据您对问题的更新,您的数组数据只有一个元素。这就是您想要的吗?如果数组只有一个元素,为什么要使用bash数组?在这种情况下,它们没有任何价值。拆分一个元素的规则是什么?你想在每个字符后面加一个逗号吗?data=1,2,3,4,5与data=1,2,3,4,5相同-也就是说,它仍然是一个单元素数组。echo${data[*]}在这种情况下肯定不会回显1 2 3 4 5,除非您有IFS=,在这种情况下,结果在扩展完成后、回显启动之前被拆分为单独的参数进行回显…要有一个5项数组,它需要是data=1 2 3 4 5。但这不适用于所需的OP。而${x[@]}数组的其余部分仍然在那里……也就是说,如果没有明确的理由,使用for循环限制几乎是不实际的,正如所要求的那样。要求一个for循环来构造参数扩展所支持的东西,这要求性能更差,并且通常要求减少引导的简洁性。@CharlesDuffy,谢谢;你说的是真的。。。虽然我关于不使用for的评论有点滑稽。这个周末,我回答了一些听起来很像家庭作业的问题,我的简短回答可能对某类学生来说是一项更大的工作,也可能会惹恼任何过份文字化的测试者。嗯,s/waggish/被动攻击/?