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

put output from command into many variables in 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",并且不创建任何临时文件?

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

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

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

如果您不关心被命名为 </code> 和 <code> 的两个赋值变量,您可以使用:

set $(uptime -s)

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

你可以像这样用管道把它切开

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`

希望对您有所帮助