有点远
正如@devnull 已经回答的问题指出错误在哪里,
还有一些想法:
为了进行这种浏览,有一个非常强大的命令find
可以让你递归地找到你正在搜索的内容:
Var2=`find /stud_data/Input_Data/test3 -name '*.txt' | wc -l`
如果你不认为这是递归的:
Var2=`find /stud_data/Input_Data/test3 -maxdepth 1 -name '*.txt' | wc -l`
如果您只想要文件(意味着没有符号链接,也没有目录)
Var2=`find /stud_data/Input_Data/test3 -maxdepth 1 -type f -name '*.txt' | wc -l`
等等...请阅读手册页:man find
。
由于您的问题代表bash ,因此您可以使用一些bashism来加快速度:
#!/bin/bash
Var1=22
VarLs=(/stud_data/Input_Data/test3/*.txt)
[ -e $VarLs ] && Var2=${#VarLs[@]} || Var2=0
Var3=$(( Var1 + Var2 ))
echo $Var3
# Uncomment next line to see more about current environment
# set | grep ^Var
其中 bash 扩展将转换/path/*.txt
为一个数组,其中包含与 jocker 形式匹配的所有文件名。
如果没有匹配表单的文件,VarLs
将只包含jocker表单本身。
因此测试-e
将纠正这一点:如果返回列表的第一个文件存在,则将列表 ( ${#VarLs[@]}
)中的元素数赋值给Var2
else,赋值0
给Var2
。