Bash脚本访问重定向|管道输入

时间:2013-03-05 21:10:47

标签: linux bash

我找到了一个很好的实用程序脚本,可以从所需的起始行有效地输出所需数量的行。我把它命名为mid.bak,它基于这里的帖子>> http://www.fastechws.com/tricks/unix/head_tail_mid_files.php

用法:mid.bak startline numlines filename

$ cat mid.bak
#!/bin/sh
echo "Positional parameter count: $#"
tail -n +$1 $3 | head -n $2
echo "Parameter three is: $3"

案例I:按照上面列出的正常用法,找到位置参数“$ 3”。

$ mid.bak 3 2 file.txt
Positional parameter count: 3
This line 3 in file.txt
This line 4 in file.txt
Parameter three is: file.txt

案例II& III:“3美元”神秘地缺席。

$ mid.bak 3 2 < file.txt
Positional parameter count: 2
This line 3 in file.txt
This line 4 in file.txt
Parameter three is: 

$ cat file.txt | mid.bak 3 2
Positional parameter count: 2
This line 3 in file.txt
This line 4 in file.txt
Parameter three is: 

我的问题:对于案例I,正常的$ 1,$ 2 ..参考文件可以使用上面的位置参数3美元。那么为什么它不包括在计数“$#”&amp;没有回应II和&amp; III?

1 个答案:

答案 0 :(得分:3)

如果是I,则文件名是第3个参数。在案例II和III中,没有第3个参数,因此$3扩展为空字符串,并且由于未引用,将从传递给tail的参数列表中删除。 tail,未在其参数列表中接收文件名,而是从标准输入读取,标准输入通过案例II中的file.txt运算符连接到<,并输出到{{1}在案例III中通过管道。