您知道什么时候做类似的事情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
给变量。
你能详细阐述一下你的更大目标吗?你真正想做什么?