小小空格,大意不得

yahoon
小小空格,大意不得

在计算机业者里面,通常对空格不是很重视,因为在一般的程序语言里面,大都会有这么一个概念,一个空格与N个空格没啥区别,于是通常为了排版漂亮,方便阅读会人为的增减空格,也没有太在意.但是,千万千万,如果空格出现在了不该出现的地方,那也是相当头疼的.

这里举两个例子
在写shell脚本的时候,有时命令会相当长,这个时候我们通常会用反斜杠/来把命令续写到下一行.今天就碰到一个奇怪的事情,执行一个数据库备份的命令的时候,报错了
命令如下:

/usr/bin/mysqldump -h localhost --opt -u root -pxxx /  
xyz_abc  /
--ignore-table=xyz_abc.a1  /
--ignore-table=xyz_abc.a1_ac_ne  /
--ignore-table=xyz_abc.a1_aptne  /
--ignore-table=xyz_abc.a1_gatys  /
--ignore-table=xyz_abc.a1_m_c  /
--ignore-table=xyz_abc.a1_rle /
--ignore-table=xyz_abc.a1_ts  /
--ignore-table=xyz_abc.td  /
--ignore-table=xyz_abc.tc  /
--ignore-table=xyz_abc.t1_mt  /
--ignore-table=xyz_abc.tc_mt  /
--ignore-table=xyz_abc.xd  /
--ignore-table=xyz_abc.xi  /
--ignore-table=xyz_abc.x_db  /
> /data_backup/xyz_abc.sql

写起来都很顺,复制到shell里面运行的时候报错了..
shell把它当做了两条命令来执行..找了半天才发现问题

每行/的后面必须立刻回车,不能有空格,否则shell就认为这个命令结束了.....
实在是难发现啊~


还有一次是执行一个创建数据库的命令,命令十分简单
CREATE DATABASE `test ` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
报错显示
ERROR 1102 (42000): Incorrect database name 'test '
这个十分明显,是test后面多了个空格...

这篇文章内容着实太基础了,旨在提醒读者与自己,对空格这个东东,咱还真不能马虎!

更多精彩文章请访问我的博客
[url]http://yahoon.blog.51cto.com/13184/80162[/url]

jerrymy
学习了.:em46:

jinl
看来1楼是吃过亏了,不过吃一堑长一智,大家都需要注意啊

anhongkui
是你理解错了,
‘/’是转义的意思
如果‘/’后边跟空格,则把空格当作参数传递给了程序
如果是换行,则将下一行当作参数

zeuswangyu
学习了:em02:
上一篇:请教一个关于SHELL的问题 下一篇:下面没有链接了