感谢yu000hong,原文链接:http://blog.sina.com.cn/s/blog_48a45b9501010s8x.html

特殊的赋值 
Shell中可以将数字或字符直接赋予变量,也可以将Linux命令的执行结果赋予变量,如下:

(1) $ count=9           #将数字赋予变量count

(2) $ name="ming"  #将字符赋予变量name

(3) $ listc=`ls -la`     #将Linux命令赋予listc,listc的值就是该命令的执行结果


反引号的作用

反引号的作用就是将反引号内的Linux命令先执行,然后将执行结果赋予变量。尽管可以通过输入字符或者字符串来创建变量值,也可以获取来自于其他Linux命令的值。为把Linux命令的结果赋予变量,实现需要执行这个命令。如果在命令行上把Linux命令放在反引号中,这个命令会首先被执行,其结果会成为命令行的一个参数。在赋值时,通过把命令放在反引号中,以便于首先执行,命令的执行结果会被赋予一个变量。反引号可以被视为由要执行命令组成的表达式,其结果会被赋予变量。组成命令的字符本身不会被赋予。在下面的范例中,命令ls *.c被执行,其结果然后被赋予变量listc。ls *.c会生成具有.c扩展名的所有文件列表。这个文件列表随后被赋予变量listc。


  1. listc=`ls *.c`  

  2. $ echo $listc  

  3. main.c prog.c lib.c 


反引号与单引号的区别

需要记住单引号和反引号之间的区别。单引号把Linux命令视为字符集合。反引号会强迫执行Linux命令。有时候,当希望使用反引号时,会误用单引号。在下面的范例中,如要给lscc变量赋值,需要给命令ls *.c应用单引号,而不是反引号。在这种情况下,ls *.c仅仅是被赋予变量lscc的字符集合。在第二个范例中,反引号被应用于ls *.c命令,会强迫这个命令。扩展名.c的文件名列表会生成,并赋予变量lscc。


  1. lscc='ls *.c' 

  2. $ echo $lscc  

  3. ls *.c  

  4. lscc=`ls *.c`  

  5. $ echo $lscc  

  6. main.c prog.c