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

时间:2018-07-29 17:32:59

标签: linux bash macos scripting directory

鉴于下面的bash代码,我正在定义一个表示文件夹的变量,并且正在检查它是否是文件夹。我什至可以使用变量名浏览它。

这里有一个小问题,我用最后一个字符'/'定义了文件夹的名称,因为制表符补全以这种方式完成了字符串。

#! /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_DIR也会带我到同一个文件夹中。

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 个答案:

答案 0 :(得分:0)

如果您只关心字符串相等性,则可以使用\扩展(删除匹配的后缀模式)从VAR_LOG中删除结尾的${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测试中,引用相同inode(硬链接)的不同文件名将评估为-ef