shell之小括號、中括號、大括號


1、Shell中變量的原形:${var}  一串命令的執行(代替變量

#等價於
$ var=test 
$ echo $var 
test 

#例如,用在這個位置
$ echo ${var}AA 
testAA 

2、命令替換$(cmd) 一串命令的執行(替換命令

命令替換$(cmd)和符號`cmd`(注意這不是單引號,在美式鍵盤上,`是ESC下面的那個鍵)有相同之處

$ ls 
a b c 
$ echo $(ls) 
a b c 
$ echo `ls` 
a b c 

我們來分析一下命令echo $(ls),以便理解所謂命令替換是什么意思:
shell掃描一遍命令行,發現了$(cmd)結構,便將$(cmd)中的cmd執行一次,得到其標准輸出,再將此輸出放到原來命令echo $(ls)中的$(ls)位置,即替換了$(ls),再執行echo命令。

()和{}都是對一串的命令進行執行,但有所區別:
A,()只是對一串命令重新開一個子shell進行執行
B,{}對一串命令在當前shell執行

3、POSIX標准的擴展計算:$((exp))  用於數學計算(整數的比較和運算

這種計算是符合C語言的運算符,也就是說只要符合C的運算符都可用在$((exp)),甚至是三目運算符。
注意:這種擴展計算是整數型的計算,不支持浮點型.若是邏輯判斷,表達式exp為真則為1,假則為0。

$ echo $((3+2)) 
5 
$ echo $((3>2)) 
1 
$ echo $((25<3 ? 2:3)) 
3 
$ echo $var 

$ echo $((var=2+3)) 
5 
$ echo $var 
5 
$ echo $((var++)) 
5 
$ echo $var 
6 

4、單中括號 [] 對於轉義字符要加\ eg:[ \($INT\)]

bash 的內部命令, [ 和 test 是等同的。

Test和[]中可用的比較運算符只有==和!=,兩者都是用於字符串比較的,不可用於整數比較,整數比較只能使用-eq,-gt這種形式。無論是字符串比較還是整數比較都不支持大於號小於號。

因為[ 是Linux內部命令,所以 [ a+b ]之間要有空格。

 

5、雙中括號[[ ]]   不用加斜杠轉義eg: [[ ($INT) ]] 較常用

[[是 bash 程序語言的關鍵字。使用[[ ... ]]條件判斷結構。比如,&&、||、<和> 操作符能夠正常存在於[[ ]]條件判斷結構中,但是如果出現在[ ]結構中的話,會報錯。

4、5例如:

if ($i<5)
if [ $i -lt 5 ]
if [ $a -ne 1 -a $a != 2 ]
if [ $a -ne 1] && [ $a != 2 ]
if [[ $a != 1 && $a != 2 ]]
 
for i in $(seq 0 4);do echo $i;done
for i in `seq 0 4`;do echo $i;done
for ((i=0;i<5;i++));do echo $i;done
for i in {0..4};do echo $i;done

 https://my.oschina.net/tridays/blog/807162

最后,推薦使用 [[ 來進行各種判斷,這能避免很多錯誤,比如 $a 為空的情況下,[ $a == 1 ] 就是語法錯誤,因為 [ 命令拿到的實際上只有 ==1] 三個參數。即:[[]]常用些。 

 

$ [ 1 < 2 ]
zsh: no such file or directory: 2
#-------------------------------------
$ [[ 1 < 2 ]] && echo True || echo False
True

 

 

 


首先,來看下shell中$與各種括號的結合:

$( )運行shell命令返回輸出

如$(ls -a)

$(( )) 算術運算

如$(($a+$b))

$[] 算術運算

如$[$a+$b]

${ } 變量調用

如${$var}

 

再來看看單獨使用的情況:

( ) 正則表達式中可以表示分組,並在后面通過\1,\2等調用

[ ] 測試表達式

[[ ]] 測試表達式

{ }可用於括起整個命令塊

 

實在是不好記,於是,小林君又反過來總結變量調用、命令調用、測試表達式和算術運算的方法:

 

變量調用:

方法一:${var}

方法二:$var

 

 

命令調用:

方法一:`COMMAND`

方法二:$(COMMAND)

 

測試表達式:

方法一:[ expression ]

方法二:[[ expression ]]

方法三:test expression

 

 

算術運算

方法一:let 算術運算表達式

let C=$A+$B 這里變量A和B前面的$可以省略

方法二:$[算術運算表達式]

C=$[$A+$B]

方法三:$((算術運算表達式))

C=$(($A+$B))

方法四:expr 算術運算表達式,表達式中各操作數及運算符之間要有空格,而且要使用命令引用,遇到乘法的*號還要轉義

C=`expr $A + $B`

方法五:expr $[算術運算表達式],遇到乘法*號不用轉義。

 

 

dd


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM