eval 解释 bash 中的新行

eval to interpret new lines in bash

我之前有一个运行命令$cmd,这个命令输出多行。

我想从 运行ning $cmd.

的编辑版本中获取 nth 输出行

到目前为止我已经尝试过:

local -a lines

for line in $(eval "$(some_edit $cmd)");do
  lines+=("$line")
done

echo "${lines[$nth_line]}"

$nth_line1 时,我总是 echo 一切,而对于更大的整数则没有。

我总是 $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