我正在使用bash创建一个输出一组值的脚本(每行一个),然后运行它,然后将输出放入一个数组中。我想将空行保留为空数组元素,因为空值仍然是一个值,这是匹配我期待的值列表的唯一方法。
因此对于以下bash代码:
> IFS=$'\n'
> foo=( $(echo 'foo bar'; echo; echo; echo baz) )
> echo ${#foo[@]}
2
我预计会看到4个输出,因为有四行输出。相反,只包含带有内容的行,因此数组中只有两个值。
以下替代方案没有帮助:
> foo=( `echo 'foo bar'; echo; echo; echo baz` )
> echo ${#foo[@]}
2
> foo=( "$(echo 'foo bar'; echo; echo; echo baz)" )
> echo ${#foo[@]}
1
如何做到这一点?
答案 0 :(得分:5)
如果您使用bash
4或更高版本,
readarray -t foo < <(echo 'foo bar'; echo; echo; echo baz)
在早期版本中,我建议采用更零碎的方法:
foo=()
while IFS= read -r; do
foo+=( "$REPLY" )
done < <(echo 'foo bar'; echo; echo; echo baz)