【bash学习001】引号的使用以及几个容易被混淆的符号

  学习BASH,已有十天了。每次阅读BASH脚本时,总是碰见一些同样的问题。总结一下,防止再犯。

  1 引号

  BASH是一个解释语言,在LINUX下,BASH的解释器是终端或者shell。随心所欲的处理字符是BASH强大的地方之一,通配符以及引用都是用以实现这个目标的工具。

  引用有两种方式:单引号和双引号。双引号是弱引用,在双引号内的特殊字符仍可以被解释。特殊字符常见的有$,`(反引号,命令替换的作用)等。

  单\双引号的例子:

1 num=hello world   #报错,因为中间有空格号

2 

3 num="hello world" #正确,双引号内的内容作为一个整体赋值

4 

5 echo $num

6 

7 echo "$num"           #两个echo结果一致

8 

9 echo '$num'            #这个echo将会显示不同的结果,你可以试一试

 

  有些时候,需要显示这些特殊符号($,`),而非解释它们。这时候,单引号就派上用场了。单引号用来显示特殊符号。

  以上是单\双引号的介绍,两者作用很相似。另外还有反引号,虽然也叫引号,作用却完全不同于单\双引号。反引号的作用,一般的书介绍是命令替换,这个解释有些抽象,不如换成命令解释。反引号作用,也就是将反引号内的命令解释执行,并将反引号内的命令执行结果输出。不知道我这样说,表达是否更清楚。

  反引号的例子:

echo `pwd` #pwd命令是显示当前目录,而echo `pwd`将输出/home/xy

   注:一般高手不建议使用反引号进行命令替换,而用$()符号。具体原因不清楚,因为我也是菜鸟。^_^

  2 bash中 2> &1 & 的解释

  这个我就不写了,有一篇文章写得比较好,网址是:http://blog.csdn.net/astonqa/article/details/8252791

  

  3 /dev/null

  /dev/null意味空设备。空设备意味着所有输入其中的内容都将消失。

  它的作用,将一些过于巨大的出错信息文件自动销毁。

 

  4 $@,$*,$?,$#的解释

  在终端中,每当运行一个命令时,比如“ls -l"或“cat 1.txt”,命令行以空格作为分隔符,然后将分隔开来的字符作为参数输入终端解释器(shell),ls和-l将分别输入,在bash中,对于命令行中不同位置的参数有统一的名字:位置参数。位置参数的表示就是$0,$1,$2等。而$#表示位置参数的个数,如ls -l 位置参数个数是2。$@和$*都表示包含所有的位置参数。唯一的区别是$@被解释为"$1""$2".....,而$*被解释为"$1 $2 $3....."。通过下面这个示例代码最容易解释:

#!/bin/bash



my_fun(){



      echo "$# arguments"

}



my_fun "$*"



my_fun "$@"         #两者运行结果不一样

  结果不一样的原因:仔细看这一小节中的红色字体,双引号的解释。我的理解放在下面的view code中,你可以先试着回答。

View Code
my_fun "$*"



这个命令将被解释器翻译为my_fun "$1 $2 $3",shell中运行,双引号内的内容相当于一个参数。



my_fun "$@"



这个命令将被解释为my_fun "$1" "$2"....,有多个参数。





所以,两者运行结果不一致。

   $?的作用

  一个命令就是一个程序,运行结果都有退出状态。在shell中,退出状态,如果不将其立即保存,它就会“消失”。而$?作用就是保存命令的退出状态。其值($?)为运行的最后一个命令的退出状态。例如

  cd dir

  echo $?  ###假设dir存在,则shell显示0,否则,为1。

   shell中,除了$?保存退出状态,还有return语句,可以将退出状态保存在某个变量中。方式如下:

  return $es  ####es的值就是某个函数的退出状态

你可能感兴趣的:(bash)