Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用Bash中的变量检查文件夹是否相同?_Linux_Bash_Macos_Scripting_Directory - Fatal编程技术网

Linux 如何使用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

给定下面的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_目录也会将我带到同一个文件夹

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}" ]; ...