bash - eval 解释 bash 中的新行
问题描述
我有一个以前运行的命令$cmd
,这个命令输出多行。
我想nth
从运行编辑版本的$cmd
.
到目前为止,我已经尝试过:
local -a lines
for line in $(eval "$(some_edit $cmd)");do
lines+=("$line")
done
echo "${lines[$nth_line]}"
我总是echo
什么时候$nth_line
都是1
,对于更大的整数什么都没有。
我总是有$lines
一个字符串的数组 - 这是所有的行。
我尝试了 的组合"
,但无济于事。
解决方案
我不知道我的理解是否正确-您的意思是这样吗?
#!/bin/bash
cmd="./script.sh"
# read stdout from $cmd into array lines
readarray lines < <($cmd)
# edit the second line
lines[1]=$'version: 0.99\n'
# loop over array and print lines
for line in "${lines[@]}"; do
printf "%s" "$line"
done
模拟 $cmd 的测试脚本
#!/bin/bash
echo "start"
echo
echo "do something"
echo
echo "end"
输出
start
version: 0.99
do something
end
推荐阅读
- asp.net-mvc - ASP.NET MVC 5 和 EF 6:事务处理的长时间运行进程中的并发处理
- python - 从谷歌共享驱动器下载文件
- kdb - 将字符串期限转换为年份
- mysql - 为什么产品没有被删除,而是被重定向到另一个页面?
- html - 当时只检查了一个输入 css
- javascript - webpack-cli 错误:编译规则集失败
- python - 在 Keras 中训练模型时的值错误
- django - Django Forms:RelatedManager' 对象没有属性
- shopify - 根据客户位置自动履行订单 - 应用建议?
- sql-server-2016 - 在不考虑周六和周日的情况下生成指标