我试图在bash中序列化一个数组,然后将其导出:
function serialize
{
for i in ${1[@]}; do
ret+=$i" "
done
return ${ret::-1}
}
MEASUREMENT_OUTPUT_FILES=( t1DQ.txt t1CS.txt t2RXe.txt t2e.txt )
export MEASUREMENT_OUTPUT_FILES=${serialize MEASUREMENT_OUTPUT_FILES[@]}
代码产生以下错误:
MEASUREMENT_OUTPUT_FILES = $ {serialize MEASUREMENT_OUTPUT_FILES [@]}:不好 取代
任何想法是正确的语法(从导出开始的最后一行中的错误)是什么?
答案 0 :(得分:2)
我相信你想要:
export MEASUREMENT_OUTPUT_FILES=$(serialize "${MEASUREMENT_OUTPUT_FILES[@]}")
(其中$(...)
是command substitution)的表示法。
那就是说,你的命令实际上相当于
export MEASUREMENT_OUTPUT_FILES="${MEASUREMENT_OUTPUT_FILES[*]}"
所以除非你想改进序列化逻辑,否则你不需要serialize
函数。 (你应该考虑做什么,恕我直言:只是加入一个空格容易出错,因为如果其中一个参数包含空格怎么办?)
编辑添加:此外,我不知道我们之前是如何错过的,但是这个:
return ${ret::-1}
实际上需要这样:
echo "${ret::-1}"
或者这个:
printf %s "${ret::-1}"
因为return
用于设置函数的退出状态,该函数必须是整数。 (它用于指示成功,零,与失败,非零,但有些命令为多个非零值赋予特殊含义。)你想要的功能是" print"文件,所以你可以捕获它们。