以下变量分配之间有什么区别?
var=23
var =23
var= 23
var = 23
赋值运算符周围的空间是否有差异?
var
,然后var =23
将通=23
到VAR,并var = 23
会通过=
,并23
于VAR。或者,如果您有一个调用的命令,var=
那么var= 23
它将传递23
给该命令var=
。
bash
,与sh
四种情况完全相同。
以下变量分配之间有什么区别?
var=23
var =23
var= 23
var = 23
赋值运算符周围的空间是否有差异?
var
,然后var =23
将通=23
到VAR,并var = 23
会通过=
,并23
于VAR。或者,如果您有一个调用的命令,var=
那么var= 23
它将传递23
给该命令var=
。
bash
,与sh
四种情况完全相同。
Answers:
这很大程度上取决于外壳。如果仅查看4个主要的shell家族(Bourne,csh,rc,fish):
这是Bourne shell和它的所有变体和ksh
,bash
,ash
/ dash
,zsh
,yash
。
var=23
:这是正确的变量赋值语法:一个单词,该单词由无引号的字母,数字或下划线组成,后跟一个无引号=
,出现在命令参数前(此处是独立的)var =23
,var
带有=23
as参数的命令(除非zsh
where =something
是扩展到something
命令路径的特殊运算符。在这里,您很可能会收到错误,因为23
它不太可能是有效的命令名)。var= 23
:分配var=
后跟命令名称23
。这意味着要执行23
并将var=
其传递到其环境(var
具有空值的环境变量)。var = 23
,var
使用=
和23
作为参数命令。echo = 23
例如尝试。csh
和tcsh
。变量分配具有set var = value
标量变量,set var = (a b)
数组,setenv var value
环境变量,@ var=1+1
赋值和算术评估的语法。
所以:
var=23
只是在调用var=23
命令。var =23
正在var
使用=23
作为参数调用命令。var= 23
正在var=
使用23
作为参数调用命令var = 23
正在var
使用=
和23
作为参数调用命令。那是rc
,es
和akanga
。在这些shell中,变量是数组,赋值是with var = (foo bar)
,var = foo
它们的简称var = (foo)
(一个foo
元素一个数组)和(不包含元素的数组,包含一个空元素的数组)的var =
简称。var = ()
var = ''
在任何情况下,=
都允许使用空格(制表符或空格)或空格。因此,在这些shell中,这4条命令是等效的,并且等效var = (23)
于分配一个元素为的数组23
。
在中fish
,变量赋值语法为set var value1 value2
。像in中一样rc
,变量是数组。
因此,其行为与相同csh
,除了fish
不会让您运行名称为的命令=
。如果您有这样的命令,则需要通过sh
例如调用它sh -c 'exec weird===cmd'
。
因此,所有的var=23
和var= 23
给你一个错误,var =23
将调用var
命令=23
作为参数,var = 23
将调用var
与命令=
和23
作为参数。
var=23
是将值分配给变量的正确语法。var =23
被视为var
带有命令=23
选项/自变量的命令var
(尽管参数/选项的正确/标准语法为-option
或--option
)var= 23
不会分配任何内容,var
因为空格会中断分配过程,23
并将其视为另一个命令。解决方法是var=\ 23
或var=' 23'
用于存储空白。var = 23
具有与第二种情况相同的效果。
实际上,这种周围空间的使用=
方式通常用于内部测试条件中[[ ]]
。Bash示例:
string1 = string2
True if the strings are equal. = should be used with the test command for POSIX conformance.
When used with the [[ command, this performs pattern matching as described above (Compound Commands).
毕竟,空白的行为=
取决于您的Shell和编程语言。