将输出重定向到变量?


9

我对将两个命令的输出定向到一个变量很感兴趣。我不希望输出显示在屏幕上,而是分配给脚本中的变量,以便我可以再次使用它。

我正在做的是使用下面显示的命令从目录中获取文件大小:

ls -l /var/spool | wc -c

该命令获取文件大小(以字节为单位),并将输出显示为整数。我有兴趣将此整数分配给自己喜欢的变量,以便以后可以将其与另一个变量进行比较

这似乎不起作用:

size = ls -l /var/spool | wc -c

重定向会起作用吗?

像这样....

ls -l /var/spool | wc -c > size

无论哪种方式,我都希望将此数字输出分配给变量而不在屏幕上显示。

任何建议都非常欢迎!

Answers:


12

看起来很简单。

romano@RRyS:~$ size=$(ls -l /var/spool | wc -c)
romano@RRyS:~$ echo $size
476

Shell语法$(command)执行command,并返回标准输出:只需将其保存在变量中即可。

您的命令:

ls -l /var/spool | wc -c > size 

size在当前目录中创建一个命名文件 (包含数字和换行符)。


或反引号命令:size=`ls -l /var/spool | wc -c`。在您的答案中使用以下格式:“``size =`ls -l / var / spool | wc -c```”不带双引号;)
αғsнιη14年

1
@KasiyA我更喜欢使用$(),其原因在这里说明:stackoverflow.com/a/9449788/2907484 :-)
Rmano 2014年

1
(1)完成后ls -l /var/spool | wc -c > size_file,您可以read size_var < size_file。(2)另请参见$()能否始终替换反引号以替换命令?
G-Man说'

6

我更喜欢Rmano的答案提供的解决方案,但是如果您只想使用重定向:

read size < <(ls -l /var/spool | wc -c)

1
只使用重定向的主要好处是,它不下咽错误(取决于你如何让您的脚本设置为管加工- set -eset -o pipefail等)。因此,如果您使用$(…)脚本,则脚本将始终继续,而使用重定向可以将其设置为失败。(可能就是您想要的)。
加勒特·莫兹纳
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.