Bash字符串与空格的比较

时间:2015-02-04 16:35:50

标签: bash

好的,我是bash的新手,并且在for循环中将字符串与另一个字符串进行比较时遇到了一些问题。

   #loop through usb repo main folder to gather file names.  Then check in that folder to find out if 'repodata' exists.  If it does then do a createrepo -update if not then run a regular createrepo to make the file

RepoPath="/media/My Passport/RHEL_Repo/rhel-6-workstation-all"

for j in "$RepoPath"/*
  do
    if [[ "$j" != "$RepoPath/repodata" ]]
      then
        for repoDir in "$j"/*
          do

#I would like this to evaluate if the directory ends with a folder named "repodata"...it is currently incomplete
            if [[ -d "$repoDir"]] 
              then
                echo "$repoDir"
                echo folder exists
                #createrepo -v -update /media/My Passport/RHEL_Repo/rhel-6-workstation-all/$j
            else
                echo "$repoDir"
                echo does not exist
                #createrepo -v /media/My Passport/RHEL_Repo/rhel-6-workstation-all/$j
            fi
        done
    else
      echo Incorrect Eval
    fi
done

问题是变量字符串“RepoPath”中有一个空格。这导致循环将前半部分分离为第一个var而第二个分成另一个是外翻路径。内部嵌套的“if”然后评估为“else”并打印每个片段并且echo“不存在”。

我对此感到困惑,并且想知道是否有人可以帮我修复这个问题,这个问题似乎是由路径变量中的空间引起的。感谢。

1 个答案:

答案 0 :(得分:1)

您在变量$RepoPath周围遗漏了一些双引号:

if [[ "$j" != "$RepoPath/repodata" ]]

您可以将整个字符串包装在相同的引号中,没有任何问题。 实际上,您不需要这里的引号,因为您正在使用bash的增强型[[,但这仍然是一种很好的做法

此外:

for repoDir in "$j"/*

这里,*应保持不加引号,以便扩展,而不是按字面解释。这个肯定需要引用。