如何使用 heredoc 附加到 bash 字符串数组
How can you append to a bash array of strings with heredoc
我需要使用 heredocs 创建一堆字符串,我想将它们存储在一个数组中,以便我可以 运行 稍后通过流程处理它们。例如
IFS='' read -r -d '' data << END
{
"my": "first doc"
}
END
IFS='' read -r -d '' data << END
{
"my": "second doc"
}
END
我知道我可以使用
这样的结构附加到文档数组
docs+=("${data}")
在每个 heredoc 之后,但是有没有一种巧妙的方法我可以直接在读取命令中执行它而无需分配索引值(这样我就可以更改顺序,在中间添加其他内容等等而不会很尴尬)?
简单的方法是构建一个使用名称变量间接引用目标数组的函数。
请注意,namevars 是 bash 4.3 中添加的功能;在那次发布之前,要在不遇到像 eval
这样令人不快的情况下对变量进行参数化并不是那么容易,所以如果你想要可移植性,你可能最终只是硬编码 data
作为你的目的地(这在手头的上下文)。
append_to_array() {
declare -n _dest=""
_dest+=( "$(</dev/stdin)" )
}
append_to_array data <<'END'
{
"my": "first doc"
}
END
append_to_array data <<'END'
{
"my": "second doc"
}
END
查看此 运行
我需要使用 heredocs 创建一堆字符串,我想将它们存储在一个数组中,以便我可以 运行 稍后通过流程处理它们。例如
IFS='' read -r -d '' data << END
{
"my": "first doc"
}
END
IFS='' read -r -d '' data << END
{
"my": "second doc"
}
END
我知道我可以使用
这样的结构附加到文档数组docs+=("${data}")
在每个 heredoc 之后,但是有没有一种巧妙的方法我可以直接在读取命令中执行它而无需分配索引值(这样我就可以更改顺序,在中间添加其他内容等等而不会很尴尬)?
简单的方法是构建一个使用名称变量间接引用目标数组的函数。
请注意,namevars 是 bash 4.3 中添加的功能;在那次发布之前,要在不遇到像 eval
这样令人不快的情况下对变量进行参数化并不是那么容易,所以如果你想要可移植性,你可能最终只是硬编码 data
作为你的目的地(这在手头的上下文)。
append_to_array() {
declare -n _dest=""
_dest+=( "$(</dev/stdin)" )
}
append_to_array data <<'END'
{
"my": "first doc"
}
END
append_to_array data <<'END'
{
"my": "second doc"
}
END
查看此 运行