一、$( ) 与 ` ` (反引号) 的区别
在 bash shell 中,$( ) 与 ` ` (反引号) 都是用来做命令替换用(command substitution)的。但是对于初学者来说,` ` 很容易与 ' ' ( 单引号)搞混乱。 而$( ) 则比较直观。
` ` 基本上可用在全部的 unix shell 中使用,若写成 shell script ,其移植性比较高。而 $( ) 并不见的每一种 shell 都能使用。
二、${ } 的作用
${ } 用来作变量替换。
一般情况下,$var 与 ${var} 并没有啥不一样。
但是用 ${ } 会比较精确的界定变量名称的范围,比方说:
$ A="b"
$ AB="ab"
$ echo $AB
原本是打算先将 $A 的结果替换出来,然后再补一个 B 字母于其后,但在命令行上,真正的结果却是只会提换变量名称为 AB 的值出来,结果却是输出了ab,若使用 ${ } 就没问题了。
$ echo ${A}B
那么输出的结果将是bB。
另外${}还有很多强大的功能,如下。
假设我们定义了一个变量为:
file="http://mp.blog.csdn.net/postedit"
我们可以用 ${ } 分别替换获得不同的值:
${file#*/}:拿掉第一条 / 及其左边的字符串:/mp.blog.csdn.net/postedit
${file#*//}:拿掉第一条 // 及其左边的字符串:mp.blog.csdn.net/postedit
${file##*/}:拿掉最后一条 / 及其左边的字符串:postedit
${file#*.}:拿掉第一个 . 及其左边的字符串:blog.csdn.net/postedit
${file##*.}:拿掉最后一个 . 及其左边的字符串:net/postedit
${file%/*}:拿掉最后条 / 及其右边的字符串:http://mp.blog.csdn.net
${file%%/*}:拿掉第一条 / 及其右边的字符串:http:
${file%.*}:拿掉最后一个 . 及其右边的字符串:http://mp.blog.csdn
${file%%.*}:拿掉第一个 . 及其右边的字符串:http://mp
${file:0:5}:提取最左边的 5 个字节: http:
${file:5:5}:提取第 5 个字节右边的连续 5 个字节: //mp.
我们也可以对变量值里的字符串作替换:
${file/http/https}:将第一个 http 提换为 https: https://mp.blog.csdn.net/postedit
${file//t/T}:将全部 t 提换为 T:hTTp://mp.blog.csdn.neT/postediT
最后,${#var} 可计算出变量值的长度:
${#file} 可得到 32
三、 $(( )) 的用途
$(( ))是用来作整数运算的。
例:
$ a=5; b=7; c=2
$ echo $(( a+b*c ))
19
$ echo $(( (a+b)/c ))
6
$ echo $(( (a*b)%c))
1
在 $(( )) 中的变量名称,可于其前面加 $ 符号来替换,也可以不用,如:
$(( $a + $b * $c)) 也可得到 19 的结果