0

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

用法:mid.bak startline numlines 文件名

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

案例一:按照上面概述的正常用法,找到位置参数“$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: 

我的问题:上面的位置参数 $3 可通过正常的 $1, $2 .. 用于案例 I 的脚本引用。那么为什么它不包含在计数“$#”中并且对于案例 II 和 III 没有回显?

4

1 回答 1

3

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

于 2013-03-05T21:35:28.747 回答