为什么点 (.) 被用作源的别名以及为什么其他命令也没有快捷方式?

为什么点 (.) 被用作源的别名以及为什么其他命令也没有快捷方式?

编辑:实际上,它不是别名(参见答案)

众所周知,在 shell 中,点命令 ( .) 是 source 命令的别名。

但我想知道这么奇怪的别名背后是否有原因?显然,我不经常使用它,所以我需要这么短的别名。

那么,为什么要加一个点呢?为什么 forsource而不是更常用的命令,例如cdor ls?为什么还要别名?这背后有充分的理由吗?还是有历史原因?

笔记:我最初在服务器故障上发布了这个问题,但建议我将其发布在这里。

答案1

.是个POSIX标准

source是 bash 的内置同义词,.并且不像.

另请注意,Bash 参考手册中.列出了4.1 Bourne Shell 内置函数并列source在下面4.2 Bash 内置命令作为:

的同义词。 (请参阅 Bourne Shell 内置函数)。

bash 命名它可能是source因为它在 C shell 中被称为(该命令显然源自该命令)。

答案2

就 Bash 而言,.source不是其中一个或另一个的别名,这是一个简单的事实,它们都是调用相同底层函数 的内置函数source_builtin

看一下source.defBash 源代码中的文件:

$PRODUCES source.c

$BUILTIN source
$FUNCTION source_builtin
$SHORT_DOC source filename [arguments]
Execute commands from a file in the current shell.

Read and execute commands from FILENAME in the current shell.  The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.

Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
$END

$BUILTIN .
$DOCNAME dot
$FUNCTION source_builtin
$SHORT_DOC . filename [arguments]
Execute commands from a file in the current shell.

Read and execute commands from FILENAME in the current shell.  The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.

Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
$END

参考

答案3

点命令很可能是在 1976 年由 Bourne Shell 引入的。

source 命令由 csh 于 1977 年或 1978 年引入。

因此,一项“发明”不存在别名关系,而是同时有两个不同的名称。

顺便说一句:我可以告诉你为什么cd这样命名。该命令以前被称为chdir,但是对于 1974 年即将推出的 110 波特调制解调器来说,这太长了(输入速度很慢)...

相关内容