Bash 将命令输出拆分为行数组
下面是我的bash函数,它获取命令的输出作为参数,然后返回一个输出行数组Bash 将命令输出拆分为行数组,bash,Bash,下面是我的bash函数,它获取命令的输出作为参数,然后返回一个输出行数组 function get_lines { while read -r line; do echo $line done <<< $1 } SESSIONS=`loginctl list-sessions` get_lines "$SESSIONS" 但是while循环只运行一次,在一行中打印所有输出。如何获取行数组并返回它? 这个答案的价值在于解释OP代码的问题。
function get_lines {
while read -r line; do
echo $line
done <<< $1
}
SESSIONS=`loginctl list-sessions`
get_lines "$SESSIONS"
但是while循环只运行一次,在一行中打印所有输出。如何获取行数组并返回它?
这个答案的价值在于解释OP代码的问题。-其他答案显示了使用Bash v4+内置
mapfile
(或其有效别名readarray
)直接逐行将输入读取到数组元素中,而无需自定义shell函数。-在Bash v3.x中,您可以使用
IFS=$'\n'read-r-d'-a行<您可以使用readarray并避免使用get\u行函数:
readarray SESSIONS < <(loginctl --no-legend list-sessions)
readarray会话<在bash
v4+中有一种方法:
SESSIONS=`loginctl list-sessions`
mapfile -t myArray <<< "$SESSIONS"
SESSIONS=`loginctl列出会话`
mapfile-t myArray++,但您应该添加-t
,以免捕获每个输入行的尾部\n
readarray
需要Bash 4.x。看起来不错。我不明白<++;值得注意的是,mapfile
(及其有效别名,readarray
)需要bash4.x。
get_lines < <(loginctl list-sessions)
loginctl list-sessions | get_lines
readarray SESSIONS < <(loginctl --no-legend list-sessions)
SESSIONS=`loginctl list-sessions`
mapfile -t myArray <<< "$SESSIONS"