为什么命令不适用于以赋值开头的命令?

Tim*_*Tim -1 bash

来自 Bash 手册:

命令 [-pVv]命令[参数 ...]

运行带有参数的命令,忽略任何名为 command 的 shell 函数。仅执行 shell 内置命令或通过搜索 PATH 找到的命令。如果有一个名为 ls 的 shell 函数,在该函数内运行“command ls”将执行外部命令 ls 而不是递归调用该函数。-p 选项意味着使用 PATH 的默认值,保证找到所有标准实用程序。在这种情况下,如果找不到命令或发生错误,则返回状态为 127,否则为命令的退出状态。

手册是否解释了为什么在命令赋值或以赋值开头(对于环境变量)失败?

$ command aaa=1
aaa=1: command not found

$ command aaa=1 echo hello
aaa=1: command not found
Run Code Online (Sandbox Code Playgroud)

jll*_*gre 6

您混淆了 POSIX 所谓的“简单命令”,它是可选赋值、可选重定向和可选词(包括命令名称及其可选参数)的非空序列,以及 Bash 手册command概要中使用的“命令”这里只是一个命令名称。

如果你真的想在这里使用赋值,你可以简单地运行:

aaa=1 command echo hello
Run Code Online (Sandbox Code Playgroud)

如果根本没有命令而只是一个赋值,那么使用该command命令没有多大意义,因为首先没有内置命令或命令可以在 PATH 中搜索。

如果你真的只想用 设置一个变量command,你可以使用

command typeset aaa=1
Run Code Online (Sandbox Code Playgroud)

或者

command declare aaa=1
Run Code Online (Sandbox Code Playgroud)

  • 我希望我能给这个不止一票。你说的正是我的想法。 (2认同)