想要一个脚本来像 grep 一样处理屏幕打印。
我可以像这样运行它:cat file.txt |我的脚本
尝试了下面的脚本,它没有打印出任何内容。
#!/bin/bash
line=$@
echo $line
答案1
与 @glemco 的答案相同的想法,但这个版本对于特殊字符应该是安全的(不包括 NULL 字节):
#!/bin/bash
while IFS= read -r line
do
printf '%s\n' "$line"
done
IFS=
是为了防止修剪前导和尾随空格-r
用于防止反斜杠转义被处理"
周围的引号"$line"
是为了防止全局扩展,并防止用单个空格替换空白序列
答案2
您正在尝试从命令行参数 ( $@
) 读取,而您应该从stdin
.基本上,管道将第一个命令附加stdout
到第二个命令stdin
。在 bash 中执行您想要的操作的一个简单方法是使用read
内置命令,如示例中所示逐行执行。
#!/bin/bash
while read line
do
echo $line
done
当然你可以做任何你想做的事情而不是 echo 。