簡體   English   中英

Bash腳本訪問重定向|管道輸入

[英]Bash script access redirected|piped input

我發現了一個不錯的實用程序腳本,可以從所需的起始行有效地輸出所需的行數。 我將其命名為mid.bak,它基於此處的帖子>> http://www.fastechws.com/tricks/unix/head_tail_mid_files.php

用法:mid.bak起始行numlines文件名

$ 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。那么為什么它不包含在計數“ $#”中,而對於情況II和III卻沒有回顯呢?

在情況I中,文件名是第3個參數。 在情況II和III中,沒有第3個參數,因此$3擴展為空字符串,並且由於未引用,因此從傳遞給tail的參數列表中將其刪除。 tail在其參數列表中未接收到文件名,而是從標准輸入讀取,在情況II中,該標准輸入通過<運算符連接到file.txt ,在情況III中通過管道連接到cat file.txt的輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM