计算shell变量中的项数

计算shell变量中的项数,shell,Shell,我有一个shell变量sampleDir: sampleDir=/home/sample* echo $sampleDir 将提供: /home/sample_001 /home/sample_002 /home/sample_003 (注意,示例_***下有子目录) 如果我想计算$sampleDir变量中的这些项目的数量,那么最好的方法是什么?(期望返回3)将变量存储在数组中: sampleDir=(/home/sample*) 使用参数展开获取阵列中的项目数: echo "${#sam

我有一个shell变量sampleDir:

sampleDir=/home/sample*
echo $sampleDir
将提供:

/home/sample_001 /home/sample_002 /home/sample_003
(注意,示例_***下有子目录)


如果我想计算$sampleDir变量中的这些项目的数量,那么最好的方法是什么?(期望返回3)

将变量存储在数组中:

sampleDir=(/home/sample*)
使用参数展开获取阵列中的项目数:

echo "${#sampleDir[@]}"

sampleDir=/home/sample*
将文本
'/home/sample*'
分配到
sampleDir

$ echo "$sampleDir" 
/home/sample*
但是如果不双引号引用变量展开,它将进行全局展开(除非
set-f
处于启用状态) 并在
$IFS
字符上拆分(在
IFS
变量中的字符-通常为空格、制表符和换行符)

通过将未加引号的
$sampleDir
传递给 数一数它的论点

argc() { argc=$#; } 
argc $sampleDir
echo $argc      #will print the number of items $sampleDir expanded to 
这就是如何在任何POSIX外壳上实现可移植性(基于阵列之类的解决方案仅限于具有阵列的外壳)


(我建议通过将shell函数中的内容赋给与函数同名的全局变量来返回它。
它是可移植的,名称空间干净,而且速度非常快(与回显不同,然后使用捕获来获取回显字符串,这是常见的,但相当昂贵))

当您摆出姿势时,您正在尝试计算字符串中的空格数并添加一个空格。有很多好方法可以做到这一点。最短的键入时间可能与

COUNT=$(grep -o ' ' <<< "$sampleDir" | wc -l)
((COUNT++))

我不确定我是否相信给定设置的输出。
/subdir
部分是从哪里来的?@madpysicator抱歉刚才看到了你的评论。我已经编辑了这篇文章。谢谢。非常感谢您的详细解释!在shell中有很多东西需要学习:)非常有用。实际上,我想知道是否有一种wc-l方法:)
sampleRoot=/home
find "$sampleRoot" -name 'sample*' | wc -l