在变量中捕获命令的输出

在变量中捕获命令的输出

您知道什么时候做类似的事情apt-cache search something | less吗?那么(在 Bash 脚本中)如何获取输入并将其设置为变量(就像less正在做的事情,但less不是 Bash 脚本)?

答案1

如果您想less在编写的脚本中执行类似正在做的事情(在其标准输入上接收输入,处理它,然后输出它),您可以while read在脚本中使用循环。

#!/bin/bash
echo "Beginning"
while read -r line
do
    echo "Processed: [$line]"
done
echo "Ending"

然后你可以像这样运行它:

some_command | your_script

输出结果如下:

Beginning
Processed: [First line of input]
Processed: [Second line of input]
Processed: [Third line of input]
Processed: [Fourth line of input]
Ending

假设其some_command本身输出:

First line of input
Second line of input
Third line of input
Fourth line of input

该变量$line被依次赋值为输入的每一行的值。如果需要,你可以通过将每一行连接到标量变量来累积这些行:

all=$all$line

或者

all+=$line

或者通过在数组末尾附加元素:

array+=($line)

答案2

你误解了command | less。在这种情况下,less命令不会导致连接;管道将前一个命令连接到less。另外,你说的是“输入”,但我认为你的意思是“输出”。在这种情况下,你在终端中输入的内容是输入;输出是command吐出的内容。less 收到|通过(又称管道)获取命令的输出。管道获取一个命令的标准输出,并将其作为另一个命令的标准输入。(您可能会发现这篇维基百科文章很有帮助。

要将一个命令的输出分配给变量,通常会执行以下操作:

variable=$(command)
# older syntax for above
variable=`command`

但我非常怀疑您是否真的想将输出分配apt-cache search foo给变量。

你能详细阐述一下你的更大目标吗?你真正想做什么?

相关内容