将命令的输出放入 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`
希望对您有所帮助
我有命令,输出两列。例如:
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`
希望对您有所帮助