相关疑难解决方法(0)

unix,以“/”和“//”开头的路径之间的区别

在 unix/linux 中,路径中任意数量的连续正斜杠通常等效于单个正斜杠。例如。

$ cd /home/shum
$ pwd
/home/shum
$ cd /home//shum
$ pwd
/home/shum
$ cd /home///shum
$ pwd
/home/shum
Run Code Online (Sandbox Code Playgroud)

然而由于某种原因,绝对路径开头的两个正斜杠被特殊对待。例如。

$ cd ////home
$ pwd
/home
$ cd ///
$ pwd
/
$ cd //
$ pwd
//
$ cd home//shum
$ pwd
//home/shum
Run Code Online (Sandbox Code Playgroud)

补丁中任何其他地方的任何其他数量的连续正斜杠都会被截断,但开头的两个将保留,即使您随后在相对于它的文件系统中导航。

为什么是这样?/... 和 //... 之间有什么区别吗?

linux bash slash filenames

57
推荐指数
3
解决办法
2万
查看次数

稳健地构建路径

假设我在 shell 脚本中有几个变量(例如在 zsh 中):

FOLDER_1, FOLDER_2, etc.
Run Code Online (Sandbox Code Playgroud)

这些变量指的是从/. 例如,如果我有一条路径/home/me/stuff/items

变量将是:

FOLDER_1='home'
FOLDER_2='me'
FOLDER_3='stuff'
Run Code Online (Sandbox Code Playgroud)

现在,假设我想通过连接变量来重建相应的路径。一种可能的方法是按如下方式构建路径:

PATH=$FOLDER_1/$FOLDER_2/$FOLDER_3/
Run Code Online (Sandbox Code Playgroud)

但是,假设某些变量FOLDER_i带有尾随正斜杠,而其他变量则没有(我们不知道是哪个),例如

FOLDER_1='home'
FOLDER_2='stuff/'
FOLDER_3='items'
Run Code Online (Sandbox Code Playgroud)

我的问题是:我如何才能稳健地构建路径?(例如避免双斜线,并在需要的地方添加它们)。

我认为一种方法是/在变量对之间添加always ,然后使用 删除任何重复项sed,但我无法使其工作(我不确定我/是否在 中正确处理sed)。

另外,我是在重新发明轮子吗?(即是否有任何内置功能已经做到了这一点?)。

最后,如果变量在一个数组中,例如FOLDERS,是否可以在不循环的情况下做到这一点?(或者,通过循环但不知道FOLDERS数组中有多少)。

shell-script

17
推荐指数
2
解决办法
2万
查看次数

pwd 和 /bin/pwd 之间的奇怪区别

我添加了一个符号链接到当前目录ln -s . aa。如果我执行cd aa,然后我执行pwd,响应是/home/sim/aa

但是如果我执行/bin/pwd它会打印/home/sim(当前目录没有改变)。

这种差异从何而来?

shell symlink pwd

17
推荐指数
2
解决办法
5682
查看次数

标签 统计

bash ×1

filenames ×1

linux ×1

pwd ×1

shell ×1

shell-script ×1

slash ×1

symlink ×1