空格,一个看不见的字符,很不起眼,很多人经常忽略它,导致代码出错,却还找不着北。
先了解下bash中什么时候该用空格,什么时候不该用。

. 等号赋值两边不能有空格
. 命令与选项之间需要空格
. 管道两边空格可有可无

1、在[ ] 内部,如果只有一个值(那些因为缺少了空格而连一起的也算),不是空字符串就为真。所以在[ ] 之间的参数,也要两边有空格,而不能堆一起。

[root@noi ~]# if [  ];then echo "equal";fi
equal
[root@noi ~]# if [ '' ];then echo 'equal';fi
equal
[root@noi ~]# if [ '' ];then echo 'equal';else echo 'no equal';fi
no equal
[root@noi ~]# if [ ];then echo 'equal';else echo 'no equal';fi
no equal

极具迷惑性的代码,原因上面找:

#虽然错了,双等号前后缺少空格,却得到了正确答案。
[root@noi ~]# if [ 'abc'=='abc' ];then echo 'equal';else echo 'no equal';fi
equal
#这次就比较明了了,明显的不能,却说相等。
[root@noi ~]# if [ 'abc'=='bcd' ];then echo 'equal';else echo 'no equal';fi
equal

2、在bash里面,最好给变量加上双引号,防止运行出现意外。如果没有双引号,shell遇到未定义的变量或者在变量值中含有空格时,

将导致不可预料的错误。

[root@noi ~]# filename="my document"
#touch生成了2个文件my和document
[root@noi ~]# touch $filename
[root@noi ~]# ls
alias.set  a.out  default.pass  document  exists_folder  exists.txt  my  t  t1  t1.cpp  t.c  t.cpp  t.sh  wai.bat
#添加双引号后,没有错误了
[root@noi ~]# touch "$filename"
[root@noi ~]# ls
alias.set  a.out  default.pass  document  exists_folder  exists.txt  my  my document  t  t1  t1.cpp  t.c  t.cpp  t.sh  wai.bat
[root@noi ~]# ls $filename
document  my
[root@noi ~]# rm document my
rm: remove regular empty file `document'? y
rm: remove regular empty file `my'? y
[root@noi ~]# ls $filename
ls: cannot access my: No such file or directory
ls: cannot access document: No such file or directory
[root@noi ~]# ls -l "$filename"
-rw-r--r-- 1 root root 0 May 23 21:30 my document

Bash中的空格的更多相关文章

  1. git bash中带空格的文件夹以及文件的处理

    空格用'\ '表示,输入的时候,是不需要单引号的 total 338drwxr-xr-x 9 Administ Administ 4096 Aug 24 23:53 HDTHelperdrwxr-xr ...

  2. bash 中的变量

    bash 中的变量 Linux command line 笔记 变量无需声明,自动创建 var=abc #变量a赋值为字符串abc var="hello world" #字符串里有 ...

  3. bash中一些基础知识

    bash是linux操作系统的shell.以下是Multi-Perspective Sentence Similarity Modeling论文实现时碰到的一个bash: #!/bin/bash py ...

  4. Bash中的位置参数和特殊参数

    #Bash中的位置参数和特殊参数 #Bash中的位置参数是由0以外的一个或多个数字表示的参数.#位置参数是当Shell或Shell函数被引用时由Shell或Shell函数的参数赋值,并且可以使用Bas ...

  5. bash中的数值运算

    第一种,使用((表达式)): a=3 ((b=a+2)) echo $b 第二种使用let: let "c=$a+4" echo $c 第三种,使用expr表达式(注意空格不能少) ...

  6. Bash中的数学扩展

    Bash只支持整数运算,不支持浮点运算.如果需要进行浮点运算,需要使用bc程序.Bash中的数学扩展有两种形式:$[ expression ]或$(( expression )) 例子:$echo $ ...

  7. bash中(),{},(()),[],[[]]的区别

    前言:在bash中遇到各种括号,同时在进行字符数值比较判定时,总是不断出现问题,于是通过参考<advanced bash-scripting guide>,同时在centos 6.7版本上 ...

  8. Bash中的测试——test, [], [[]], (())

    转自: http://blog.csdn.net/u013961718 https://www.shiyanlou.com/courses/running test 和 [ ] test是一条内置命令 ...

  9. Bash 中常见的字符串操作

    获取字符串长度 ${#string} MyString=abcABC123ABCabc 注意这会自动去掉字符串结尾处的空格,如果在字符串中包含空格(开头.中间或结尾),就需要使用引号把字符串包裹起来: ...

随机推荐

  1. Multivariate Adaptive Regression Splines (MARSplines)

    Introductory Overview Regression Problems Multivariate Adaptive Regression Splines Model Selection a ...

  2. !!! # @ --- ODATA 云驱动 --- 数据库发布 RESTFUL API

    Cloud Drivers   ODATA 云驱动   http://www.cdata.com/cloud/ Makes on-premise & cloud data sources ea ...

  3. jquery滚动条插件nanoscroller的应用

    默认的滚动条的样式,各个版本的兼容性不是很好, 推荐一款jQuery 插件nanoscroller ,可以自定义滚动条的样式. 应用: 1.引入样式 nanoscroller.css <link ...

  4. shell 脚本中执行mysql语句

    通过hash建表之后,表的数据量巨大2048,那怎么去验证表是否建成功呢? 逻辑生成表名这部分就不写了.只要能建表成功,这部分的脚本肯定是有的.那么怎么在shell中执行selec查询并返回呢 只要在 ...

  5. grep:字符串查找

    转自: http://www.cnblogs.com/peida/archive/2012/12/17/2821195.html Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达 ...

  6. Android 开发之 ---- bootloader (LK)

    LK是什么 LK 是 Little Kernel 它是 appsbl (Applications ARM Boot Loader)流程代码  ,little kernel 是小内核小操作系统. LK ...

  7. web前端入坑第二篇:web前端到底怎么学?干货资料! 【转】

    http://blog.csdn.net/xllily_11/article/details/52145172 版权声明:本文为博主[小北]原创文章,如要转载请评论回复.个人前端公众号:前端你别闹,J ...

  8. 可视化Tensorboard图中的符号意义

    可视化Tensorboard图中的符号意义

  9. 014敲代码将一个栈按升序排序,对这个栈是怎样实现的,你不应该做不论什么特殊的如果(keep it up)

    敲代码将一个栈按升序排序. 对这个栈是怎样实现的,你不应该做不论什么特殊的如果. 程序中能用到的栈操作有:push | pop |isEmpty 最easy想到的就是优先队列来做此题.easy实现. ...

  10. PHP-时间小结

    //获得本周(本天)时间戳的起始和结束//本周星期一时间戳$monday = mktime(0, 0, 0, date("m",strtotime("last Monda ...