2013-03-25 163 views
0

我遞歸計數格式在命令行中作爲參數給定的文件中的行,例如, * .txt ...在這個例子中,我正在搜索所有.txt文件並計算它們的行數。另外,我必須回顯輸入參數。我的問題是回聲,當我嘗試「$ 1」時,它擴展並回顯所有的.txt文件,也與'$ 1'相呼應$ 1 ...我想要的不是擴展,而是回聲原始輸入,在這種情況下*。文本。參數擴展bash

編輯:

我打電話用2個參數的腳本,首先是遞歸的開始目錄,並且第二個是期望的文件類型的格式。

./script.sh test *.txt 

然後,我需要回聲雙方的參數和遞歸數,其格式給出第二個參數

echo $1 
echo $2 

find /$1 -name "$2" | wc -l 

這個代碼不當前正在使用的文件的線條,但我m試圖首先修復參數回聲。

+3

請顯示你的代碼,這聽起來像你期望'* .txt'被傳遞給你的腳本, ,shell將擴展它,而是將與該模式匹配的文件傳遞給您的腳本噸。 – chepner 2013-03-25 23:04:50

+0

我編輯了我的帖子,請現在檢查一下:) – Luka 2013-03-25 23:12:41

回答

1

沒有辦法只爲你的特定腳本做到這一點。不要試圖使./script.sh foo *.txt以您想要的方式工作。這不是貝殼如何工作,也沒有其他公用工具。

相反,你應該這樣做同樣的方式findgrep做的:簡單地要求用戶引用:

./script.sh foo '*.txt' 

當你這樣做,你可以script.sh使用$2報價保持它作爲一種模式(就像在你的find /$1 -name "$2" | wc -l中一樣,或者不加引號將它擴展爲多個文件名,就像在你的echo $2中一樣)

+0

謝謝,我正在考慮這個問題,但我認爲這可以解決我的(錯誤的)方法。 – Luka 2013-03-25 23:30:13

2

如果你真的要禁用glob ING(這是奇數),您可以設置:

set -o noglob 

要重新設置這個選項爲關閉:

set +o noglob 

但我不知道你真的想做什麼,但我覺得你做錯了。你應該考慮在上下文中給出更多的解釋

+0

有沒有更優雅的解決方案,或者這是唯一的方法? – Luka 2013-03-25 23:23:10

+0

在您的評論前幾​​秒看到我的編輯 – 2013-03-25 23:23:50

+0

您是否看到我的編輯?我必須用第二個參數中給出的格式對所有文件的行進行計數。第一個參數是起始目錄,它遞歸地進入所有子目錄。另外,我必須回顯第二個參數 – Luka 2013-03-25 23:27:37