将命令的输出放入sh中的许多变量中

时间:2015-10-29 13:19:17

标签: bash posix sh

我有命令,输出两列。例如:

undefine@uml:~$ uptime -s
2015-10-26 08:47:12

如何将这两列放入单独的变量中? 我想做点什么:

undefine@uml:~$ uptime -s | read day hour
undefine@uml:~$ echo $day
undefine@aml:~$

我知道,在bash中我可以执行它:

undefine@uml:~$ read day hour <<< $(uptime -s)
undefine@uml:~$ echo $day
2015-10-26

我还可以将输出从正常运行时间重定向到文件,然后从该文件中读取:

undefine@uml:~$ uptime -s > tmpfile
undefine@uml:~$ read day hour < tmpfile
undefine@uml:~$ echo $day
2015-10-26

但是怎么做“posix sh way”,而不创建任何临时文件?

3 个答案:

答案 0 :(得分:2)

如果您不关心名为$1$2的两个指定变量,您可以使用:

set $(uptime -s)

(这不是一个完全认真的答案。)

答案 1 :(得分:1)

在POSIX shell中,您可以在此处记录文档以及命令替换:

read day hour <<EOF
$(uptime -s)
EOF

(从技术上讲,这可能仍然使用临时文件,但shell会为您管理它。)

答案 2 :(得分:-1)

您可以通过滚边将其拆分为

myVar1=$(echo uptime -s | cut -d" " -f1)
myVar2=$(echo uptime -s | cut -d" " -f2)

这通常适用于bash。在sh,你将不得不使用返回滴答,所以

myVar1=`uptime -s | cut -d" " -f1`
myVar2=`uptime -s | cut -d" " -f2`

希望这有帮助