为什么命令不能与以赋值开头的命令一起使用?

为什么命令不能与以赋值开头的命令一起使用?

来自 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

答案1

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

如果您确实想在此处使用分配,您可以简单地运行:

aaa=1 command echo hello

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

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

command typeset aaa=1

或者

command declare aaa=1

答案2

使用“let”命令(用于算术表达式)

简单赋值的命令形式aaa=1let aaa=1。但是,这仅适用于算术表达式(不适用于字符串赋值):

$ command let aaa=1
$ echo $aaa
1
$ command let aaa=6*3+5
$ echo $aaa
23

相关内容