空格,一个看不见的字符,很不起眼,很多人经常忽略它,导致代码出错,却还找不着北。
先了解下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. 神技!微信小程序(应用号)抢先入门体验(附最新案例-豆瓣电影)持续更新

    微信小程序 Demo(豆瓣电影) 由于时间的关系,没有办法写一个完整的说明,后续配合一些视频资料,请持续关注 官方文档:https://mp.weixin.qq.com/debug/wxadoc/de ...

  2. 初始加载时edittext不自动获取焦点的方法

    在做一个搜索功能时,刚进入界面,edittext直接自动获取焦点,这显然不是我想要的. 那么问题来了:如何关闭EditText自动获取焦点的? 尝试了好几个方法,在Java代码添加focus控制,在x ...

  3. Android内存优化5 了解java GC 垃圾回收机制3

    引言 接App优化之内存优化(序), 作为App优化系列中内存优化的一个小部分. 由于内存相关知识比较生涩, 内存优化中使用到的相关工具, 也有很多专有名词. 对Java内存管理, GC, Andro ...

  4. android4.1 JELLY_BEAN:All WebView methods must be called on the same thread[问题已解决]

    11-06 18:29:15.582: W/WebView(27807): java.lang.Throwable: A WebView method was called on thread 'Ja ...

  5. iOS:键盘弹出和收起的通知使用

    介绍:不论是UITextField,还是UITextView,使用它们输入文字时都是有键盘的弹出,此时可能会挡住我们创建的一分部其他视图,此时,就需要根据键盘的高度将我们被隐藏的部分View做向上或者 ...

  6. ray tracing/shadow,reflection, caustic

    看了一下午终于明白raytracing的算法了 不知道这次能记住多久 ssr我又完全不记得了 按照Henrik所说 理解raytracing的核心在于,它是从Eye到light反着走的 需要一个前序的 ...

  7. 《深入理解Java虚拟机》笔记5

    Java虚拟机可以执行的语言并不是只有Java语言,比如jython也可以 运行在Java虚拟机上.不明白字节码之前觉得挺疑惑,为什么和Java 完全不同语法的程序语言也可以运行在虚拟机上呢? 不得不 ...

  8. Getting to grips with CakePHP’s events system

    CakePHP seems to get a slightly unfavourable reputation when compared to the likes of Symfony or Zen ...

  9. mybatis paramType String Error

    我这么写的 <select id="getHotPlayersByDate" parameterType="java.lang.String" resul ...

  10. [Functional Programming Monad] Apply Stateful Computations To Functions (.ap, .liftA2)

    When building our stateful computations, there will come a time when we’ll need to combine two or mo ...