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