以下脚本起什么作用?

以下脚本起什么作用?

以下脚本起什么作用?

#!/bin/bash

echo $(ls|grep -E "*\.$1$"|wc -l)

答案1

它是意图可能是计算当前目录中带有“点后缀”的文件数,这些文件与作为脚本参数提供的文件数相匹配。然而,它似乎是由对以下几件事感到困惑的人编写的:

  • 使用*开始正则表达式的这个部分"*\.$1"实际上没有任何意义。在 BRE 中,*没有任何前置原子是字面意思,大概作者发现添加后,-E它就变成了一个量词,可以匹配零个或多个空字符串实例。无论哪种方式,它都是多余的,grep 可以简单地写成grep "\.$1$"

  • 没有必要wc因为grep -c可以计算匹配的行

  • 无需捕获 grep/wc 的输出,然后使用 echo 打印刚刚捕获的内容。

所以你可以把它改成

#!/bin/bash

ls|grep -c "\.$1$"

ls但是,用这种方式抓取输出是不好的做法。特别是,Linux 文件名可能包含换行符,从而影响计数。更好的方法是直接使用文件名扩展(又称“通配符”),例如

#!/bin/bash

shopt -s nullglob

files=( *."$1" )
echo ${#files[@]}

相关内容