空格,一个看不见的字符,很不起眼,很多人经常忽略它,导致代码出错,却还找不着北。
先了解下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. hdu3401 Trade 单调队列优化dp

    Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  2. 在WPF中使用FontAwesome之类的字体图标

    我之前在博客中介绍过几个矢量图库网站,在WPF程序中,一般接触到的矢量图标资源有XAML.SVG.字体这三种格式.XAML是标准格式就不说了,SVG并不是直接支持的,不过微软提供了Expression ...

  3. http://www.pass.org

    http://www.pass.org/Learning/Recordings/Listing.aspx?category=conferences

  4. 从connect到express02-中间件morgan

    控制台输出请求日志 输出格式 默认格式: dev, combined, tiny等 自定义格式: morgan(':method :url :status :res[content-length] - ...

  5. 【java】随机生成6位的数字 /生成例如010 045这样的三位数

    int radomInt = new Random().nextInt(999999) @org.junit.Test public void testName() throws Exception ...

  6. LaTeX 相对于 Word 有什么优势?

    sjhstone ,本科EE在读 vczh等 276 人赞同 [Word公式进阶请往下翻]有人还写过论文,参见PLOS ONE: An Efficiency Comparison of Documen ...

  7. chrome.webRequest

    chrome.webRequest 描述: 使用 chrome.webRequest API 监控与分析流量,还可以实时地拦截.阻止或修改请求.  可用版本: 从 Chrome 17 开始支持.  权 ...

  8. 捕获和记录SQL Server中发生的死锁

    经带在论坛上看到有人在问怎么捕获和记录死锁信息,在这里,我将自己的一些心得贡献出来,与大家分享,也请各位指正. 我们知道,可以使用SQL Server自带的Profiler工具来跟踪死锁信息.但这种方 ...

  9. LINUX下渗透提权之嗅探技术

    内网渗透在攻击层面,其实更趋向于社工和常规漏洞检测的结合,为了了解网内防护措施的设置是通过一步步的刺探和经验积累,有时判断出错,也能进入误 区.但是如果能在网内进行嗅探,则能事半功倍,处于一个对网内设 ...

  10. shadow mapping实现动态shadow实现记录 【转】

    http://blog.csdn.net/iaccepted/article/details/45826539 前段时间一直在弄一个室内场景,首先完成了render,效果还可以.然后给其加上shado ...