如何将命令的 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
我有一个名为“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