为什么某些 bash 命令中不允许使用空格,例如“别名”?

为什么某些 bash 命令中不允许使用空格,例如“别名”?

我知道如果等号旁边有空格,bash 中的别名命令将不起作用。例如,

alias loadcode='vim *.c *.h Makefile'

有效,但是

alias loadcode ='vim *.c *.h Makefile'

或者

alias loadcode= 'vim *.c *.h Makefile'

或者

alias loadcode = 'vim *.c *.h Makefile'

不工作。为什么是这样?

答案1

因为alias可以用来查询别名,以及一次设置多个别名:

$ alias foo                       # query for one alias
bash: alias: foo: not found

$ alias foo = bar                 # query for three aliaes
bash: alias: foo: not found
bash: alias: =: not found
bash: alias: bar: not found

$ alias foo=bar doo=dar           # set two aliases
$ alias doo                       # query one alias
alias doo='dar'

$ alias foo = bar                 # query three, again
alias foo='bar'
bash: alias: =: not found
bash: alias: bar: not found

(不要问我为什么它说找不到别名=,而不是告诉它是别名的无效名称。我认为是这样,我找不到设置该名称的别名的方法。)

当然,这样也符合 shell 变量赋值中空格的工作方式:

$ foo=bar doo=dar
$ echo "$doo"
dar

答案2

空间允许,执行分隔命令行参数的通常 bash 职责。

特别是关于alias......

给出alias一个不包含在其中的参数=,别名将尝试打印该名称的现有别名。

但是alias在其中给出一个参数=,然后它会创建新的别名。

如果您有冲动,可以将打印和定义结合在一行上。

相关内容