如何将命令的 return 值分配给 Bash shell 中的两个变量

How to assign return value of a command to two variables in Bash shell

我有一个名为“mycommand”的命令,returns 一行数据有 5 列,如下所示:

val1   val2   val3  val4  val5

我想编写一个脚本来将 val1 分配给一个变量,将 val2 分配给另一个变量。

我有一个 shell 脚本可以执行如下操作:

INFO=$(mycommand | awk 'NR==1 {print ,}')
echo "INFO 1 is ${INFO[1]}" 
echo "INFO 2 is ${INFO[2]}" 

显然上面那个不行

有人可以告诉我如何实现吗?

您可以使用 mycommand 的输出创建数组,方法是将命令替换 $(command) 括在括号 ( $(command) ).

数组索引也从 0 开始,因此您需要使用索引 0/1。

#!/bin/bash

mycommand()
{
    echo val1 val2 val3 val4 val5
}

INFO=( $(mycommand | awk 'NR==1 {print ,}') )
echo "INFO O is ${INFO[0]}"
echo "INFO 1 is ${INFO[1]}"

# Note: you could also just capture the whole output in the array
printf "\nAll columns:\n"

INFO=( $(mycommand) )
for ((i = 0; i < ${#INFO[@]}; i++)); do
    echo "INFO $i is ${INFO[$i]}"
done

输出

INFO O is val1
INFO 1 is val2

All columns:
INFO 0 is val1
INFO 1 is val2
INFO 2 is val3
INFO 3 is val4
INFO 4 is val5