你的用法绝对是没错的,但是现在问题在于,你最后输出的$a中,只有文件名,没有带绝对路径,所以你在wc -l的时候,不一定能找到文件。你试试在脚本中加上cd $1#!/bin/bash cd $1a=`ls $1 | grep -h access.log.0905` b=`wc -l $a`——————————————————还有你在用grep的时候用到了h选项,不知道是出于什么考虑。我理解你这个地方带不带h结果都一样。grep的-h选项 表示查询多文件时不显示文件名。示例:打印含有字符串”Oct”所在的行内容,并且不显示其文件名:$grep -h "Oct" *47 Oct 3zl1998 LPSX 43.00 kvm90 512
如果a出来是个文件列表,wc -l 只能针对单个文件,就需要用循环:echo "$a"|while read filedo wc -l $filedone 如果a出来是文件中的内容,计算行数这样:b=`echo "$a"|wc -l`