如何将命令的返回值赋给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]}" 

显然上面的方法行不通。

谁能告诉我怎么才能做到这一点?

您可以使用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

最新更新