![](/img/trans.png)
[英]Read command in bash script not waiting for user input when piped to 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.