在bash中导出序列化数组

时间:2017-06-23 16:19:02

标签: bash

我试图在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 [@]}:不好   取代

任何想法是正确的语法(从导出开始的最后一行中的错误)是什么?

1 个答案:

答案 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"文件,所以你可以捕获它们。