Bash脚本:变量中的文件夹列表,并grep确切的目录名
这是我的问题。要获取文件GC.xml所在目录的列表,请执行以下操作: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]\\\\\\\\\\\\\\\\[$
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发送一个参数