检查变量中存储的变量数量

时间:2012-01-05 16:35:47

标签: bash

我想知道您如何找到变量中存储了多少变量...例如:

dir=$(ls)

dir会存储目录中所有文件的名称,我知道你可以通过while-do循环遍历它们。但有没有办法让我知道有多少变量(在这种情况下是文件名)存储在变量(dir)中?

感谢

4 个答案:

答案 0 :(得分:5)

使用bash,这是一种将目录内容收集到数组中的更可靠的方法

dir=(*)

这将正确处理带空格的元素。

答案 1 :(得分:3)

一种干净的方法是使用bash数组。

dir=($(ls))

编辑:上面没有正确处理空格,请参阅Glenn对正确方法的回答,这仍然会创建一个bash数组:

dir=(*)

请注意上面的其他大括号。即我声明dir是一个数组,而不是一个变量。

然后你可以简单地得到dir(数组)中的元素数量:

echo ${#dir[@]}

您可以访问各个元素:

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

此处有更多详情:http://tldp.org/LDP/abs/html/arrays.html

答案 2 :(得分:2)

ls | wc -l

echo "$dir" | wc -l

给你一个近似值。 (当文件名包含换行符时,它不能很好地工作。)

找出目录中文件数的可靠方法是

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

但其中包含隐藏文件,默认情况下ls未列出。

答案 3 :(得分:0)

Bash变量是字符串或字符串数​​组,没有别的。要检查字符串变量中存储了多少个单词

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

要弄清楚当前目录中存在多少文件,@ glenn有正确的想法。要确定与任意find命令匹配的文件数量,请使用此命令:

$ find [your options] -printf x | wc -c