2015-10-11 35 views
0

我是bash編程的新手,並且爲我的程序的這一部分努力工作。我知道如何使用位置參數來引用命令行的某些元素,但是,如果指定了某個文件,我只能得到它。如何使用標準輸入位置參數,像這樣:如何在Bash中使用標準輸入的位置參數

cat test_file | stats -r 

在這種情況下,可以參考我的「0 $」統計,並以「$ 1」,但我怎麼能指的是貓的test_file裏面的部分-r?在上下文中,Stats是我的程序,它可以找到測試文件中數字的平均值和中位數。 「-r」表示該程序應該讀程序時,在命令行中是這樣寫的每一行:

stats -r test_file 

我用這個代碼表示-r

if [[ "${1:0:2}" == '-r' ]] 
    do stuff 
+1

_but我怎麼可以參考'cat test_file'部分?_簡答:你不能! –

+0

如果沒有位置參數(您可以通過查看'$#'來判斷),那麼您應該從標準輸入讀取。這將適用於管道以及用戶希望直接輸入程序的情況。 – rici

+0

如果我需要將它用作函數的參數,我如何從標準輸入讀取數據?因此,使用位置參數我調用這樣的函數:rows_stats $ 2其中$ 2是指文件名。我怎麼能只用標準輸入來做同樣的事情? – user2466886

回答

-1

試試這個:stats -r "$(cat test_file)"

+0

以下是的,但是這是爲了一個任務和分級明確嘗試使用「貓test_file |統計 - r」,看看程序是否這樣工作。 – user2466886

-1

答:隨着人們說你不能在這種情況下使用位置參數唯一的選擇是從標準輸入,並在我的情況下,它存儲在一個變量來讀取傳遞給函數

在這裏閱讀以瞭解更多如何做到這一點:How to read mutliline input from stdin into variable and how to print one out in shell(sh,bash)?

+0

如何將stdin存儲到變量中幫助您將它傳遞給期望文件名的函數? (如果你需要使用文件名來引用stdin,它是'/ dev/stdin'。) – rici

相關問題