2012-01-05 82 views
1

我想知道你會如何找到多少個變量存儲在一個variable..for例如:檢查許多變量是如何存儲在一個變量

dir=$(ls) 

目錄將存儲所有文件的名稱在目錄中,我知道你可以用while循環循環它們。但是有沒有辦法讓我知道變量(dir)中存儲了多少個變量(本例中是文件名)?

感謝

+2

我認爲在技術上,只有一個變量('dir'),它只是一個很長的字符串。如果您_assume_的條目是空格分隔的(不是字段可以有空格的情況),並且您要問變量中有多少空格分隔的字符串,那麼您應該以這種方式重新構建問題。 :) – 2012-01-05 16:47:56

+2

您不應該使用'($(ls))'作爲接受的答案,因爲它不能正確處理名稱中有空格的文件。即您的陣列數量將大於文件的實際數量。相反,您應該使用'$(*)'接受[Glenn的答案](http://stackoverflow.com/a/8750198/207248),它不僅可以正確處理帶有空格的文件,而且也不需要將外部進程調用'ls'。 – SiegeX 2012-01-06 03:28:56

+0

@SiegeX - 由於接受的答案是原始問題(如何「計數」),編輯該缺陷是公平的,是的?我現在正在這樣做。所以對評論+1。 – ArjunShankar 2012-01-06 12:32:20

回答

3

乾淨的方法是使用bash數組。

dir=($(ls)) 

編輯:以上不處理空間正常,看到格倫的答案正確的方法,仍然會創建一個bash數組:

dir=(*) 

注意上面的額外支撐。即我宣佈dir是一個數組,而不是一個變量。

然後,你可以簡單地得到的dir(數組)的元素個數:

echo ${#dir[@]} 

您可以訪問各個元素:

echo ${dir[0]} 
echo ${dir[5]} 

更多細節在這裏:http://tldp.org/LDP/abs/html/arrays.html

+0

arjun謝謝你......這就是我一直在尋找的東西 – czchlong 2012-01-05 17:00:44

+0

@czchlong - 太棒了!我也學到了一些新東西。 – ArjunShankar 2012-01-05 17:02:31

+0

你能解釋一下「[@]」是什麼嗎? – czchlong 2012-01-05 17:03:00

2
ls | wc -l 

echo "$dir" | wc -l 

給你一個近似。 (它不能很好地工作,當文件名包含換行符。)

可靠的辦法,找出文件數在目錄

find . -maxdepth 1 -print0 | tr '\n\0' '_\n' | wc -l 

但包括隱藏文件,這ls不列表默認情況下。

+0

'ls -l | wc -l'即使對於包含空格的文件名也能工作:) – asenovm 2012-01-05 16:40:09

+0

@iLate:但不包含包含換行符的文件名。 – 2012-01-05 16:44:03

+0

'echo「$ dir」| wc -l' 注意:'dir = $(ls)'將會拆分包含換行符的文件名... @larsmans您快了;-) – olibre 2012-01-05 16:44:41

5

與bash,這是一個更可靠的方式來收集到一個數組目錄的內容

dir=(*) 

這將正確處理具有空格的元素。

+0

+1這是給出理由的最佳答案。 – SiegeX 2012-01-06 03:28:41

+0

+1用於糾正陣列應該如何形成。 – ArjunShankar 2012-01-06 12:33:05

0

Bash變量是一個字符串或一個字符串數組,沒有別的。要檢查多少都存儲在一個字符串變量:

$ echo "foo bar baz" | wc -w 
3 

爲了找出多少個文件在當前目錄存在,@glenn有正確的觀念。爲了弄清楚許多文件是如何存在的相匹配的任意find命令,只要使用此:

$ find [your options] -printf x | wc -c 
相關問題