2013-03-05 85 views
0

我發現了一個很好的實用程序腳本,可以從所需的起始行高效地輸出所需數量的行。我已經把它命名爲mid.bak,它是基於這裏柱>>http://www.fastechws.com/tricks/unix/head_tail_mid_files.phpBash腳本訪問重定向|管道輸入

用法: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 &三: 「$ 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 ..所以爲什麼它不包括在計數「$#」爲案例一參考&沒有呼應出的腳本案例二&三?

+0

因爲在案例2和3中你的程序只有兩個參數。嘗試在'3 2'後面添加另一個參數並查看它打印出來的內容 – 2013-03-05 21:15:24

+0

謝謝你。但是請注意,實際上$ 3是可用的,並且在每種情況下都使用相同的值:tail -n + $ 1 $ 3 ..這個腳本使用了$ 3。 – 2013-03-05 21:26:59

回答

3

在案例I中,文件的名稱是第三個參數。在情況II和III中,沒有第三個參數,因此$3擴展爲空字符串,並且因爲未引用而從傳遞給tail的參數列表中刪除。 tail,在其參數列表中沒有接收到文件名,而是從標準輸入讀取,標準輸入通過情況II中的<運算符連接到10,並且通過情況III中的流水線連接到cat file.txt的輸出。

+0

謝謝你chepner。我正在製作更詳細的腳本,現在我明白了這個參數delema。 :) – 2013-03-05 23:15:09