来源 vs . 为什么不同的行为?

LAF*_*ica 23 bash

我最近了解到,

. ./.a.a并且./.a.a是一样的。

但是尝试source source .a.a会出错。IMO,.作为 Bash 别名source不应该表现得不同,所以我错过了什么?

奖金,为什么. .可以,而source source不是?

Ste*_*itt 33

你不能只是取代.source无处不在; 如果

. ./.a.a
Run Code Online (Sandbox Code Playgroud)

有效,您可以替换第一个.(至少在 Bash 中):

source ./.a.a
Run Code Online (Sandbox Code Playgroud)

第二个.代表当前目录下,你不能替换source(尤其是不./source你所做的)。

source source
Run Code Online (Sandbox Code Playgroud)

如果您source在当前目录中调用了一个文件,其中包含对您当前的 shell 有意义的内容,那就没问题了。我看不出怎么. .会好...

此外,. ./.a.a与不同的./.a.a是,第二种形式.a.a在单独的 shell 中运行。请参阅采购('.' 或 'source')和在 bash 中执行文件有什么区别?详情。


cou*_*ode 11

source是一个 shell 关键字,应该像这样使用:sourcefilewherefile包含有效的 shell 命令。这些 shell 命令将在当前 shell 中执行,就像从命令行键入一样。现在,.file完全一样。

除此之外,.仅表示“当前工作目录”,如./xyz(“xyz在此目录中”)或a/b/./c/./d(与 相同a/b/c/d)。

除此之外,.文件名中的含义仅按约定.foobar表示,其中表示“隐藏”文件(不是真的......)或foobar.pdf表示通过后缀(此处为.pdf)的文件格式。

这些不同的含义不能互换。

  • `.` 一点也不过时。与 `source` 不同的是,它是一种可移植的 [POSIX 定义](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#dot) 获取文件的方式。`source` 别名是特定于 shell 的,可以不存在(例如在 `dash` 中)或与标准的 `.` 表现不同。 (11认同)
  • @NoamManos 也许,但 C-shell 不是 POSIX,所以它可以(并且确实)表现得非常不同。 (2认同)