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

Bash 将命令的输出放入sh中的多个变量中,bash,posix,sh,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

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

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:~$read day hour在POSIX shell中,您可以在此处创建一个文档以及命令替换:

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

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

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`

希望这有帮助

一个临时变量如何?我发现这个
读一个b c<@tripleee你选择的副本是为
bash
,而不是POSIX。@RamboRamon不,进程替换不符合POSIX。@chepner-Thx,有好的源来查找这些东西吗?你自己的第二个例子有什么问题吗?如果只有一行,使用临时文件并使用
连接命令
正常运行时间-s>tmpfile;读取日小时数
。POSIX没有提供一行定义文档的方法;这就是为什么
bash
和其他shell在这里提供字符串。@RamboRamon
哪种正常运行时间实际上需要参数?我以前从未见过它,所以我非常肯定大多数posix系统默认情况下也不会有它。@123这与问题或答案不太相关,它提供了一种posix兼容的方式,将输出从一个命令传输到当前shell中执行的
read
命令。(
正常运行时间
本身不在POSIX规范的范围内,因此不知道任何特定的实现会接受什么。)嗯?它把myvar文本“uptime-s”-而不是日期/时间:-)放进去,这很好;它会覆盖当前位置参数,但当需要保留当前值时,它通常很明显,而且实际上很容易做到。
myVar1=`uptime -s | cut -d" " -f1`
myVar2=`uptime -s | cut -d" " -f2`