首页 > 解决方案 > 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一个字符串的数组 - 这是所有的行。

我尝试了 的组合",但无济于事。

标签: bashechoeval

解决方案


我不知道我的理解是否正确-您的意思是这样吗?

#!/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

推荐阅读