代码之家  ›  专栏  ›  技术社区  ›  lauc.exon.nod

如何使用Bash中的变量检查文件夹是否相同?[副本]

  •  0
  • lauc.exon.nod  · 技术社区  · 7 年前

    这个问题已经有了答案:

    给定下面的bash代码,我将定义一个变量来表示一个文件夹,并检查它是否是一个文件夹。我甚至可以使用变量名浏览它。

    这里有一个小问题,我用“/”作为最后一个字符定义了文件夹的名称,因为tab补全是这样完成字符串的。

    #! /bin/bash
    
    
    VAR_LOG='/var/log/'
    
    
    echo $VAR_LOG
    echo $PWD
    
    echo "browsing to log directory"
    cd $VAR_LOG
    echo $PWD
    
    
    if [ -d $VAR_LOG ]; then
        echo "$VAR_LOG is a directory"
    fi
    
    if [ ${VAR_LOG} != ${PWD} ]
    then echo not same
    else 
    echo same
    fi
    

    但是正如您所看到的,$PWD定义的路径/文件夹与最后一个字符不带“/”,字符串比较结果将为false。即使我在同一个文件夹中,cd$LOG U目录也会将我带到同一个文件夹。

    User1-MBP:log User1$ $HOME/tmp.sh 
    /var/log/
    /Users/User1
    browsing to log directory
    /var/log
    /var/log/ is a directory
    not same
    

    那么,在bash中使用目录的最佳方法是什么?将它们保留为字符串有点容易出错。

    (注意:这是一个MacOS系统-我不确定它是否会有什么不同)

    谢谢。。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Ondrej K.    7 年前

    如果只关心字符串的相等性,可以去掉尾随的 \ VAR_LOG 通过使用 ${VAR_LOG%/} 扩展( 删除匹配的后缀模式 ). 这会剥掉一个(最后一个 / 变量日志 如果存在,不存在时保持不变:

    if [ "${VAR_LOG%/}" != "${PWD}" ]; ...
    

    但是,您也可以(可能应该)使用 -ef 测试:

    FILE1 -ef FILE2 FILE1 and FILE2 have the same device and inode numbers

    即。:

    if [ ! "${VAR_LOG}" -ef "${PWD}" ]; ...
    

    确保两个文件/目录名引用同一个文件。

    这与目录无关,但引用同一索引节点(硬链接)的不同文件名的计算结果是 0 -英孚 测试。

    推荐文章