相关疑难解决方法(0)

为什么波浪号 (~) 不在双引号内展开?

根据这个答案和我自己的理解,波浪号扩展到主目录:

$ echo ~
/home/braiam
Run Code Online (Sandbox Code Playgroud)

现在,每当我希望 shell 扩展工作时,即使用诸如 的变量名$FOO,并且不要因为意外的字符、诸如空格等而中断。应该使用双引号"

$ FOO="some string with spaces"
$ BAR="echo $FOO"
$ echo $BAR
echo some string with spaces
Run Code Online (Sandbox Code Playgroud)

为什么这种扩展不适用于波浪号?

$ echo ~/some/path
/home/braiam/some/path
$ echo "~/some/path"
~/some/path
Run Code Online (Sandbox Code Playgroud)

shell

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

~ 总是等于 $HOME

我知道以前可能有人问过这个问题,但我在 Google 上找不到。

给定的

  • Linux内核
  • 没有改变 $HOME 的配置
  • 猛击

~ == $HOME是真的吗?

shell bash environment-variables home

42
推荐指数
2
解决办法
8415
查看次数

`~/Documents` 是相对路径还是绝对路径?

这只是一个词汇问题,但它一直在我的脑海中盘旋。

它来自LPIC准备书中的练习考试。根据这本书的正确答案是这~/Documents是一个相对目录,因为它是相对于主目录的。

然而,这本书包含的错别字和错误比例很高,所以我不能认为那里写的所有东西都是理所当然的。在这里我不同意,因为对我来说,~它充当了由 shell 扩展为变量内容$HOME或当前用户主目录路径(参见man bash)的变量,因此实际路径/home/myuser/Documents确实是绝对目录。

甚至Wikipedia一次,在这个话题上对我来说似乎也没有帮助(即使它似乎证实这本书在这个问题上是错误的):

无论当前工作目录如何,绝对路径或完整路径都指向文件系统中的相同位置。为此,它必须包含根目录。

相比之下,相对路径从某个给定的工作目录开始,无需提供完整的绝对路径。

在这里,我再次不同意:根据这个定义,/opt/kde3/bin/../lib不依赖于当前工作目录的路径应该是绝对路径,但是我目前对此的理解与本书作者将这条路径设为相对路径相符。

根据韦伯斯特词典,快速的网络搜索只会增加我的挫败感:

绝对路径- 相对于根目录的路径。它的第一个字符必须是路径名分隔符。

那么$HOME/Documents,甚至$HOME不会被视为绝对目录?或者这个定义是否意味着变量扩展?贝壳的~性格呢?我可以在某处找到相对目录与绝对目录的任何可靠定义,并且我一直都错了吗?

shell filenames

37
推荐指数
3
解决办法
1万
查看次数

路径语法规则

我正在编写一个用于操作 Unix 路径字符串的库。既然如此,我需要了解大多数人不会担心的语法的一些晦涩的角落。

例如,作为最好的,我可以告诉大家,似乎foo/barfoo//bar都指向同一个地方。

此外,~通常代表用户的主目录,但如果它出现在路径中间呢?那会发生什么?

如果我要编写正确处理每种可能情况的代码,这些以及其他几十个晦涩的问题需要回答。有人知道解释这些东西的确切语法规则的权威参考吗?

(不幸的是,搜索诸如“Unix 路径语法”之类的术语只会出现一百万页讨论$PATH变量……哎呀,我什至在努力为这个问题找到合适的标签!)

directory filenames

11
推荐指数
1
解决办法
3万
查看次数

标签 统计

shell ×3

filenames ×2

bash ×1

directory ×1

environment-variables ×1

home ×1