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带有=23as 参数的命令(除了zshwhere=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使用=23as 参数调用命令。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=23andvar= 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 作为一种编程语言很奇怪。但它作为交互式使用的外壳非常有意义,其中空格分隔命令和参数。大多数“特殊字符”(=在这种情况下)仅在特定位置具有特殊含义,以允许命令的几乎任意参数。请参阅上述解释。
| 归档时间: |
|
| 查看次数: |
12640 次 |
| 最近记录: |