![为什么某些 bash 命令中不允许使用空格,例如“别名”?](https://linux22.com/image/123666/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%9F%90%E4%BA%9B%20bash%20%E5%91%BD%E4%BB%A4%E4%B8%AD%E4%B8%8D%E5%85%81%E8%AE%B8%E4%BD%BF%E7%94%A8%E7%A9%BA%E6%A0%BC%EF%BC%8C%E4%BE%8B%E5%A6%82%E2%80%9C%E5%88%AB%E5%90%8D%E2%80%9D%EF%BC%9F%20.png)
我知道如果等号旁边有空格,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
在其中给出一个参数=
,然后它会创建新的别名。
如果您有冲动,可以将打印和定义结合在一行上。