评估在bash中换行

时间:2019-05-30 21:14:05

标签: bash echo eval

我有一个先前运行的命令$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是一个字符串数组-包含所有行。

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

1 个答案:

答案 0 :(得分:2)

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

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