首页 > 解决方案 > 如何将命令的返回值分配给 Bash shell 中的两个变量

问题描述

我有一个名为“mycommand”的命令,它返回一个包含 5 列的单行数据,如下所示:

val1   val2   val3  val4  val5

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

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

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

显然上面的那个是行不通的。

有人可以让我知道如何实现这一目标吗?

标签: linuxbashshellunix

解决方案


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

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

#!/bin/bash

mycommand()
{
    echo val1 val2 val3 val4 val5
}

INFO=( $(mycommand | awk 'NR==1 {print $1,$2}') )
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

推荐阅读