加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在将命令读入bash数组时如何保留空行?

发布时间:2020-12-15 21:10:13 所属栏目:安全 来源:网络整理
导读:我正在使用bash创建一个输出一组值的脚本(每行一个),然后运行它,然后将输出放入一个数组中.我想将空行保留为空数组元素,因为空值仍然是一个值,这是匹配我期待的值列表的唯一方法. 所以对于以下bash代码: IFS=$'n' foo=( $(echo 'foo bar'; echo; echo; ech
我正在使用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

如何才能做到这一点?

解决方法

如果您使用的是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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读