日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shell脚本中的几个括号总结(小括号/大括号/花括号)

發布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell脚本中的几个括号总结(小括号/大括号/花括号) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【轉載】shell腳本中的幾個括號總結(小括號/大括號/花括號)

?(2011-10-08 21:23:34) 轉載
標簽:?

雜談

分類:?linux
shell腳本中的幾個括號總結(小括號/大括號/花括號)

?????Shell的強大是毋庸置疑的,方便了我們也迷惑了我們,比如這些雜七雜八的括號,一向自認聰明的我也傻傻分不清了,今天好哈的整理一下。
?????在Shell中的小括號,大括號結構和有括號的變量,命令的用法如下:

1.${var}
2.$(cmd)
3.()和{}
4.${var:-string},${var:+string},${var:=string},${var:?string}
5.$((exp))
6.$(var%pattern),$(var%%pattern),$(var#pattern),$(var##pattern)

?????現在來一一詳細介紹:
?????1)Shell中變量的原形
???
???這個最常見的變量形式就是$var,打印var用命令
??????echo $var
??????可是這里有個問題:當你要顯示變量值加隨意的字符(如$varAA)時,就會出錯。系統會認為整個varAA是一個變量,這時就可以用一個大括號來限定變量名稱的范圍,如${var}AA,這樣就好了。

?????2)命令替換$(cmd)
??????命令替換$(cmd)和符號`cmd`(注意這不是單引號,在美式鍵盤上,`是ESC下面的那個鍵)有相同之處.以echo $(ls)來說明整個替換過程:shell掃描一遍命令行,發現了$(cmd)結構,便將$(cmd)中的cmd執行一次,得到其標準輸出,再將此輸出放到原來命令echo $(ls)中的$(ls)位置,即替換了$(ls),再執行echo命令。如下:

view sourceprint?
1 $?ls?
2 a b c?
3 $?echo?$(ls)?
4 a b c?
5 $?echo?`ls`?
6 a b c

?????3)一串的命令執行()和{}
??????()和{}都是對一串的命令進行執行,但有所區別:

A,()只是對一串命令重新開一個子shell進行執行
B,{}對一串命令在當前shell執行
C,()和{}都是把一串的命令放在括號里面,并且命令之間用;號隔開
D,()最后一個命令可以不用分號
E,{}最后一個命令要用分號
F,{}的第一個命令和左括號之間必須要有一個空格
G,()里的各命令不必和括號有空格
H,()和{}中括號里面的某個命令的重定向只影響該命令,但括號外的重定向則影響到括號里的所有命令

?????4)幾種特殊的替換結構:${var:-string},${var:+string},${var:=string},${var:?string}

??????A,${var:-string}和${var:=string}:若變量var為空,則用在命令行中用string來替換${var:-string},否則變量var不為空時,則用變量var的值來替換${var:-string};對于${var:=string}的替換規則和${var:-string}是一樣的,所不同之處是${var:=string}若var為空時,用string替換${var:=string}的同時,把string賦給變量var: ${var:=string}很常用的一種用法是,判斷某個變量是否賦值,沒有的話則給它賦上一個默認值。
??????B. ${var:+string}的替換規則和上面的相反,即只有當var不是空的時候才替換成string,若var為空時則不替換或者說是替換成變量 var的值,即空值。(因為變量var此時為空,所以這兩種說法是等價的)
??????C,${var:?string}替換規則為:若變量var不為空,則用變量var的值來替換${var:?string};若變量var為空,則把string輸出到標準錯誤中,并從腳本中退出。我們可利用此特性來檢查是否設置了變量的值。
??????補充擴展:在上面這五種替換結構中string不一定是常值的,可用另外一個變量的值或是一種命令的輸出。

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

?????6)四種模式匹配替換結構:${var%pattern},${var%%pattern},${var#pattern},${var##pattern}
?????第一種模式:${variable%pattern},這種模式時,shell在variable中查找,看它是否一給的模式pattern結尾,如果是,就從命令行把variable中的內容去掉右邊最短的匹配模式
?????第二種模式: ${variable%%pattern},這種模式時,shell在variable中查找,看它是否一給的模式pattern結尾,如果是,就從命令行把variable中的內容去掉右邊最長的匹配模式
?????第三種模式:${variable#pattern} 這種模式時,shell在variable中查找,看它是否一給的模式pattern開始,如果是,就從命令行把variable中的內容去掉左邊最短的匹配模式
?????第四種模式: ${variable##pattern} 這種模式時,shell在variable中查找,看它是否一給的模式pattern結尾,如果是,就從命令行把variable中的內容去掉右邊最長的匹配模式
?????這四種模式中都不會改變variable的值,其中,只有在pattern中使用了*匹配符號時,%和%%,#和##才有區別。結構中的pattern支持通配符,*表示零個或多個任意字符,?表示零個或一個任意字符,[...]表示匹配中括號里面的字符,[!...]表示不匹配中括號里面的字符

view sourceprint?
01 [root@root shell]# var=testcase
02 [root@root shell]# echo $var
03 testcase
04 [root@root shell]# echo ${var%s*e} 從最右邊刪除最短匹配
05 testca
06 [root@root shell]# echo $var
07 testcase
08 [root@root shell]# echo ${var%%s*e} 從最右邊刪除最長匹配
09 te
10 [root@root shell]# echo $var??變量沒有改變
11 testcase
12 [root@root shell]# echo ${var#?e} 從最左邊刪除最短匹配
13 stcase
14 [root@root shell]# echo $var
15 testcase
16 [root@root shell]# echo ${var#*e}??從最左邊刪除最短匹配
17 stcase
18 [root@root shell]# echo $var
19 testcase
20 [root@root shell]# echo ${var##*e} 從最左邊刪除最長匹配,即刪除所有?
21 [root@root shell]# echo $var
22 testcase
23 [root@root shell]# echo ${var##*s} 從最左邊刪除最長匹配
24 e
25 [root@root shell]# echo $var
26 testcase
27 [root@root shell]# echo ${var#test} 刪除test
28 case
29 [root@root shell]# echo $var
30 testcase
31 [root@root shell]# echo ${var#tests} 沒有匹配
32 testcase

最后的總結是:shell命令確實很強大的,但對我們的細心要求也是很高很高嘀,雙刃劍..

http://www.cnblogs.com/hanyan225/archive/2011/10/06/2199652.html

總結

以上是生活随笔為你收集整理的shell脚本中的几个括号总结(小括号/大括号/花括号)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。