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_line
为 1
时,我总是 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
我之前有一个运行命令$cmd
,这个命令输出多行。
我想从 运行ning $cmd
.
nth
输出行
到目前为止我已经尝试过:
local -a lines
for line in $(eval "$(some_edit $cmd)");do
lines+=("$line")
done
echo "${lines[$nth_line]}"
当 $nth_line
为 1
时,我总是 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