Bash脚本:变量中的文件夹列表,并grep确切的目录名

Bash脚本:变量中的文件夹列表,并grep确切的目录名,bash,directory,grep,Bash,Directory,Grep,这是我的问题。要获取文件GC.xml所在目录的列表,请执行以下操作: EXBRANDS=find/var/www/html/-maxdepth 3-名称“GC.xml”-键入f | awk-f'/'''{print$5}' #echo$EXBRANDS #dir1 dir2 dir3(看起来完全像这样) #读取var 例如,输入“dir” 这就是为什么我很难确定我键入的确切模式,以便与我的目录列表进行比较 echo$EXBRANDS | grep“[$var]\\\\\\\\\\\\\\\\[$

这是我的问题。要获取文件GC.xml所在目录的列表,请执行以下操作:

EXBRANDS=
find/var/www/html/-maxdepth 3-名称“GC.xml”-键入f | awk-f'/'''{print$5}'

#echo$EXBRANDS

#dir1 dir2 dir3(看起来完全像这样)

#读取var

例如,输入“dir”

这就是为什么我很难确定我键入的确切模式,以便与我的目录列表进行比较

echo$EXBRANDS | grep“[$var]\\\\\\\\\\\\\\\\[$var]”
如果[$?-eq 0]];然后。。。。。其他的fi

我认为我的grep命令有一个问题,就好像我将值“dir”传递给$var一样。我的grep命令实际上找到了目录并返回$?=0

我的愿望是,只有当它在我的grep命令中找到模式$var时,才能得到$?=0


这里最好的grep(egrep)选项是什么?还是我的方法完全愚蠢?

尝试使用单词边界:

if [ ! -z "$var" ] ;  
    then echo $EXBRANDS | grep -e "\b$var\b"; 
    if [[ $? -eq 0 ]] ; 
        then echo "Y"; 
        else echo "N"; 
    fi;
    else echo "input dir must be not null"; 
fi;

编辑:添加空检查

您的
EXBRANDS
包含许多行,并且您用echo松开了这些行

我会用另一种方式:

read var
find /var/www/html/ -maxdepth 3 -name "GC.xml" -type f | awk -F '/' '{print $5}' | grep "^$var\$"
if [[ $? -eq 0 ]] ; then ...  else ... fi;
确保grep与
“^$var\$”
构造匹配一行


< > > >编辑< /强>:您也可以<代码> Prtuf“$ExBrand”>GRIP“^ $var \ $”/代码>代替回声,它可以解决您的问题。< /P> OK解决了这个问题,但是如果我以$var命中回车,它似乎认为$= 0…我怎样才能摆脱这种情况呢?在继续执行之前,只需在$var上添加一些验证,因为我认为在空字符串上运行以下代码毫无意义。也就是说,使用if[-z“$var”]进行测试,如果正确,则优雅地退出,但仅当您不需要该格式的EXBRANDS时,才会退出;使用EXBRANDS=&lsquo;找到……”;把一切都放在同一条线上:“dir1 dir2 dir3”你确定它在同一条线上吗?如果执行
echo$EXBRANDS
,它将显示在同一行上,因为shell替换发生在参数解析之前,并且由于参数的分隔符是空格、制表符和新行,因此所有内容都显示在一行上。尝试
echo“$EXBRANDS”
,它将向
echo
cat发送一个参数