Linux 如何使用Bash中的变量检查文件夹是否相同?
给定下面的bash代码,我定义了一个变量来表示一个文件夹,并检查它是否是一个文件夹。我甚至可以使用变量名浏览它 这里有一个小问题,我用“/”作为最后一个字符定义了文件夹的名称,因为制表符完成以这种方式完成字符串Linux 如何使用Bash中的变量检查文件夹是否相同?,linux,bash,macos,scripting,directory,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
#! /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_目录也会将我带到同一个文件夹
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系统-我不确定它是否会产生任何影响)
非常感谢。如果您只关心字符串的相等性,您可以使用
${VAR\u LOG%/}
展开(删除匹配的后缀模式),从VAR\u LOG
中去除尾随的\
。这将从VAR\u LOG
中剥离一个(最后一个/
),如果存在,则保持不变:
if [ "${VAR_LOG%/}" != "${PWD}" ]; ...
但是,您也可以(可能应该)使用-ef
测试:
FILE1-ef FILE2
文件1和文件2具有相同的设备和inode编号
即:
确保两个文件/目录名引用同一个文件
这与目录无关,但引用同一索引节点(硬链接)的不同文件名将在-ef
测试中计算为0
if [ ! "${VAR_LOG}" -ef "${PWD}" ]; ...