linux - 如何将命令的返回值分配给 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