= 符号周围什么时候禁止使用空格?

dot*_*hen 10 configuration file-format

我知道在 ~/.bashrc 中不能=在赋值的符号周围放置空格:

$ tail -n2 ~/.bashrc 
alias a="echo 'You hit a!'"
alias b = "echo 'You hit b!'"

$ a
You hit a!

$ b
b: command not found
Run Code Online (Sandbox Code Playgroud)

我正在查看 MySQL 配置文件/etc/my.cnf,我发现了这个:

tmpdir=/mnt/ramdisk
key_buffer_size = 1024M
innodb_buffer_pool_size = 512M
query_cache_size=16M
Run Code Online (Sandbox Code Playgroud)

我如何验证=标志周围的空间没有问题?

请注意,此问题并非特定于/etc/my.cnf文件,而是针对一般的 *NIX 配置文件。我的第一个倾向是 RTFM,但实际上man mysql并没有提到这个问题,如果我需要为每个案例上网搜索,我将永远无法到达任何地方。是否有任何约定或简单的方法来检查?可以看出,有多个人编辑了这个文件(=符号的不同约定),我既不能强迫他们都不使用空格,也不能疯狂检查可能已配置的所有内容,可能正确也可能不正确。

编辑:我的目的是确保当前配置的文件正确完成。在自己配置文件时,我遵循包维护者在那里放置的任何约定。

Law*_*nce 20

Bash 会将文本后跟 a 的行解释=为对变量的赋值,但它将文本后跟空格的行解释为带参数的命令。

var=assignment 对比 command =argument

Bash 脚本的工作原理是,脚本中的所有内容就好像您已将其输入到命令行中一样。

在不被bash(或另一个shell)解释的配置文件中,它将由用于读取配置文件的解析器确定。有些解析器会占用空间,有些则不会。在这种情况下,这取决于应用程序。就个人而言,我使用默认配置文件使用的任何约定。

  • @dotancohen (1.) 对于任何配置文件,至少应该有一个设置,可以很容易地检查它是否损坏。无论配置文件是否允许空格,它都应该始终如一地这样做。(2.) 您可以随时下载应用程序并检查它附带的默认配置。(3.) 你总是可以完全省略空格。`a = b` 可能并不总是可以接受,但 `a=b` 应该总是有效的。 (2认同)

Vol*_*gel 3

我将以更一般的方式回答这个问题——稍微回顾一下整个“Unix学习经历”。

在您的示例中,您使用两个工具,并且看到语言是相似的。只是不清楚何时具体使用什么。当然,您可以期望有一个清晰的结构,因此您要求我们对此进行解释。
周围有空间的情况=只是一个例子——还有很多类似但相当机器人的情况。
这里面一定有逻辑吧?!

如何为某些工具、shell、数据库等编写代码的规则取决于该特定工具的需要

这意味着这些工具在技术上是完全独立的。我认为你所期望的逻辑关系根本不存在

您所看到的语言的明显相似性并不属于程序实现的一部分。之所以存在这种相似性,是因为开发人员在为特定程序写下来时就已经同意如何去做。但人类只能部分同意。

您所看到的关系是一种文化事物-它既不是实现的一部分,也不是语言定义的一部分。



那么,既然我们已经掌握了理论,那么在实践中该怎么做呢?

一大步是接受你所期望的一致性并不存在——当理解原因时,会容易得多——我希望理论部分对此有所帮助。

如果您有两个工具,它们不使用相同的配置语言(例如,都是 bash 脚本),那么了解其中一个工具的语法细节对于理解另一个工具并没有多大帮助;
所以,确实,你必须独立查找详细信息。确保您知道在哪里可以找到每个文件的参考文档。

从积极的一面来看,存在一些您意想不到的一致性:在单个工具(或使用相同语言的不同工具)的上下文中,您可以相当确定语法是一致的。
在您的mysql示例中,这意味着您可以假设所有行都具有相同的规则。所以规则是“前后空格=相关”。

学习或使用工具的配置或脚本语言的难度存在很大差异 它可以类似于“在 cmd-foo.conf 中列出 foo 值,每行一个。”。它可以是一种也可以在其他地方使用的 完整脚本语言。然后你就有了一个强大的工具来编写配置 - 在某些情况下这很好,但在其他情况下你确实需要它。复杂的工具或大型相关工具有时只是使用非常复杂的特殊配置文件语法 - (一些著名的例子是和)。 其他人使用通用脚本语言作为基础,并扩展该语言以支持特殊需求,有时在语言允许的情况下以复杂的方式。这将是特定领域语言 ( DSL )的一个非常特殊的情况。


sendmailvim