首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Bash中的变量检查文件夹是否相同?

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

Stack Overflow用户
提问于 2018-07-30 01:32:59
回答 1查看 64关注 0票数 0

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

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

代码语言:javascript
复制
#! /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也会将我带到同一个文件夹。

代码语言:javascript
复制
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系统-我不确定它是否应该有什么不同)

非常感谢..

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-30 02:02:49

如果您只关心字符串相等,可以使用${VAR_LOG%/}扩展(删除匹配的后缀模式)从VAR_LOG中剥离尾随的\。这将从VAR_LOG中剥离一个(最后一个/,如果存在,如果不存在,则保持不变:

代码语言:javascript
复制
if [ "${VAR_LOG%/}" != "${PWD}" ]; ...

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

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

即:

代码语言:javascript
复制
if [ ! "${VAR_LOG}" -ef "${PWD}" ]; ...

确保两个文件/目录名称引用相同的文件。

这与目录无关,但是引用同一inode (硬链接)的不同文件名会在-ef测试中评估为0

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51582864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档