我想知道你會如何找到多少個變量存儲在一個variable..for例如:檢查許多變量是如何存儲在一個變量
dir=$(ls)
目錄將存儲所有文件的名稱在目錄中,我知道你可以用while循環循環它們。但是有沒有辦法讓我知道變量(dir)中存儲了多少個變量(本例中是文件名)?
感謝
我想知道你會如何找到多少個變量存儲在一個variable..for例如:檢查許多變量是如何存儲在一個變量
dir=$(ls)
目錄將存儲所有文件的名稱在目錄中,我知道你可以用while循環循環它們。但是有沒有辦法讓我知道變量(dir)中存儲了多少個變量(本例中是文件名)?
感謝
乾淨的方法是使用bash數組。
dir=($(ls))
編輯:以上不處理空間正常,看到格倫的答案正確的方法,仍然會創建一個bash數組:
dir=(*)
注意上面的額外支撐。即我宣佈dir是一個數組,而不是一個變量。
然後,你可以簡單地得到的dir(數組)的元素個數:
echo ${#dir[@]}
您可以訪問各個元素:
echo ${dir[0]}
echo ${dir[5]}
arjun謝謝你......這就是我一直在尋找的東西 – czchlong 2012-01-05 17:00:44
@czchlong - 太棒了!我也學到了一些新東西。 – ArjunShankar 2012-01-05 17:02:31
你能解釋一下「[@]」是什麼嗎? – czchlong 2012-01-05 17:03:00
ls | wc -l
或
echo "$dir" | wc -l
給你一個近似。 (它不能很好地工作,當文件名包含換行符。)
可靠的辦法,找出文件數在目錄
find . -maxdepth 1 -print0 | tr '\n\0' '_\n' | wc -l
但包括隱藏文件,這ls
不列表默認情況下。
與bash,這是一個更可靠的方式來收集到一個數組目錄的內容
dir=(*)
這將正確處理具有空格的元素。
+1這是給出理由的最佳答案。 – SiegeX 2012-01-06 03:28:41
+1用於糾正陣列應該如何形成。 – ArjunShankar 2012-01-06 12:33:05
Bash變量是一個字符串或一個字符串數組,沒有別的。要檢查多少話都存儲在一個字符串變量:
$ echo "foo bar baz" | wc -w
3
爲了找出多少個文件在當前目錄存在,@glenn有正確的觀念。爲了弄清楚許多文件是如何存在的相匹配的任意find
命令,只要使用此:
$ find [your options] -printf x | wc -c
我認爲在技術上,只有一個變量('dir'),它只是一個很長的字符串。如果您_assume_的條目是空格分隔的(不是字段可以有空格的情況),並且您要問變量中有多少空格分隔的字符串,那麼您應該以這種方式重新構建問題。 :) – 2012-01-05 16:47:56
您不應該使用'($(ls))'作爲接受的答案,因爲它不能正確處理名稱中有空格的文件。即您的陣列數量將大於文件的實際數量。相反,您應該使用'$(*)'接受[Glenn的答案](http://stackoverflow.com/a/8750198/207248),它不僅可以正確處理帶有空格的文件,而且也不需要將外部進程調用'ls'。 – SiegeX 2012-01-06 03:28:56
@SiegeX - 由於接受的答案是原始問題(如何「計數」),編輯該缺陷是公平的,是的?我現在正在這樣做。所以對評論+1。 – ArjunShankar 2012-01-06 12:32:20