aja*_*jay 27 shell variable assignment
以下变量赋值有什么区别?
var=23
var =23
var= 23
var = 23
Run Code Online (Sandbox Code Playgroud)
赋值运算符周围的空间有什么不同吗?
Sté*_*las 28
这在很大程度上取决于外壳。如果我们只看 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
as 参数调用命令。var= 23
正在var=
使用23
作为参数调用命令var = 23
正在var
使用=
和23
作为参数调用命令。那是rc
,es
和akanga
。在这些 shell 中,变量是数组,赋值是 with var = (foo bar)
,withvar = foo
是var = (foo)
(具有一个foo
元素的数组)和var =
for var = ()
(没有元素的数组,使用var = ''
或var = ('')
具有一个空元素的数组)的缩写。
在任何情况下,周围的空格(空格或制表符)=
都是允许和可选的。因此,在这些 shell 中,这 4 个命令是等效的,并且等效var = (23)
于分配一个具有一个元素的数组23
.
在 中fish
,变量赋值语法是set var value1 value2
。像rc
,变量是数组。
因此,行为将与 with 相同csh
,只是fish
不会让您运行=
名称中带有 a 的命令。如果您有这样的命令,则需要通过sh
例如以下方式调用它:sh -c 'exec weird===cmd'
。
所以 all var=23
andvar= 23
会给你一个错误,var =23
将var
使用=23
作为参数var = 23
调用var
命令,=
并将使用和23
作为参数调用命令。
von*_*and 12
var=23
将 23 赋给变量var
。
var =23
尝试var
使用参数运行命令(或别名或函数)=23
var = 23
同上,但论据=
和23
var= 23
将var
环境变量设置为空字符串,然后运行命令23
是的,shell 作为一种编程语言很奇怪。但它作为交互式使用的外壳非常有意义,其中空格分隔命令和参数。大多数“特殊字符”(=
在这种情况下)仅在特定位置具有特殊含义,以允许命令的几乎任意参数。请参阅上述解释。