如何检查Bash中两条路径是否相等?

Jam*_* Ko 18 unix linux bash shell sh

在Bash中检查两条路径是否相等的最佳方法是什么?例如,给定目录结构

~/
  Desktop/
    Downloads/ (symlink to ~/Downloads)
  Downloads/
    photo.png
Run Code Online (Sandbox Code Playgroud)

并假设当前目录是主目录,以下所有内容都是等效的:

./                    and ~
~/Desktop             and /home/you/Desktop
./Downloads           and ~/Desktop/Downloads
./Downloads/photo.png and ~/Downloads/photo.png
Run Code Online (Sandbox Code Playgroud)

有没有本地Bash方式来做到这一点?

gei*_*rha 27

Bash的测试命令有一个-ef操作符用于此目的

if [[ ./ -ef ~ ]]; then ...

if [[ ~/Desktop -ef /home/you/Desktop ]]; then ...
Run Code Online (Sandbox Code Playgroud)

等等...

$ help test | grep -e -ef
      FILE1 -ef FILE2  True if file1 is a hard link to file2.
Run Code Online (Sandbox Code Playgroud)

  • 好的!看起来这种方法也正确[比较设备和 inode 编号](http://linux.about.com/library/cmd/blcmdl1_test.htm),所以我接受这个答案。 (2认同)

zed*_*xus 7

你可以用realpath.例如:

realpath ~/file.txt
Result: /home/testing/file.txt

realpath ./file.txt
Result: /home/testing/file.txt
Run Code Online (Sandbox Code Playgroud)

另外在这里看一下类似的答案:bash/fish命令打印文件的绝对路径