星外飞客

写惯了WEB代码,跑到LINUX上写bash shell的时候,习惯性地写上了:

webdir = "/www/users"

一运行就汗了。。。

提示 webdir 不是可执行的命令,怎么会这样呢?

仔细查下资料你就会发现,等号(=)两边赋值时不能有空格,具体解析看下面

 

以下内容为shell 13问的第4问

在bash shell中输入的字符分为两种:

1、普通字符(literal):在bshell中只表示常规的文字,没有特殊意义。

2、元字符(meta):就是特殊意义的保留字符,会影响命令的处理。

Literal 没什么好谈的,凡举abcd、123456 这些"文字"都是literal … (easy?)
但 meta 却常使我们困惑….. (confused?)
事实上,前两章我们在command line 中已碰到两个机乎每次都会碰到的meta :
* IFS:由<space> 或<tab> 或<enter> 三者之一组成(我们常用space )。
* CR:由 <enter> 产生。
IFS 是用来拆解command line 的每一个词(word)用的,因为shell command line 是按词来处理的。
而CR 则是用来结束command line 用的,这也是为何我们敲<enter> 命令就会跑的原因。
除了 IFS 与 CR ,常用的 meta 还有:
= : 设定变量。
$ : 作变量或运算替换(请不要与shell prompt 搞混了)。
> :重导向 stdout。
< :重导向 stdin。
|:命令管线。
& :重导向file descriptor ,或将命令置于背境执行。
( ):将其内的命令置于nested subshel??l 执行,或用于运算或命令替换。
{ }:将其内的命令置于non-named function 中执行,或用在变量替换的界定范围。
; :在前一个命令结束时,而忽略其返回值,继续执行下一个命令。
&& :在前一个命令结束时,若返回值为true,继续执行下一个命令。
|| :在前一个命令结束时,若返回值为false,继续执行下一个命令。
!:执行 history 列表中的命令
….

————————————————————————————————————-

通过一面的这段话大概能够明白,空格和等号都属于元字符(meta)中的IFS,当执行:

webdir = "/www/users"

时由于等号两段存在空格,bshell就把语句拆分了,先执行了 webdir这个命令,自然报了一开始的错误。

正确的写法应该是把=两段的空格去掉(任意一端都不能有空格)

webdir="/www/users"

版权所有,转载请注明出处。
转载自 <a href="http://www.yanghengfei.com/archives/490/" title="bash shell中给变量赋值等号两边不能有空格!" rel="bookmark">bash shell中给变量赋值等号两边不能有空格! | 星外飞客 </a>

我简单说几句

随机推荐

最新评论

无觅相关文章插件,快速提升流量