【搬運(yùn)】Linux—shell中$(( ))疏哗、$( )、``與${ }的區(qū)別

搬運(yùn)自(https://blog.csdn.net/number_0_0/article/details/73291182

命令替換
在bash中庐镐,$( )` `(反引號(hào))都是用來(lái)作命令替換的恩商。
命令替換與變量替換差不多,都是用來(lái)重組命令行的必逆,先完成引號(hào)里的命令行怠堪,然后將其結(jié)果替換出來(lái),再重組成新的命令行名眉。

echo today is $(date "+%Y-%m-%d")
today is 2014-07-01

$( )``
在操作上粟矿,這兩者都是達(dá)到相應(yīng)的效果,但是建議使用$( )损拢,理由如下:

``很容易與''搞混亂陌粹,尤其對(duì)初學(xué)者來(lái)說(shuō)。
在多層次的復(fù)合替換中福压,``必須要額外的跳脫處理(反斜線)掏秩,而$( )比較直觀。
最后荆姆,$( )的弊端是蒙幻,并不是所有的類(lèi)unix系統(tǒng)都支持這種方式,但反引號(hào)是肯定支持的胆筒。

# 將cmd1執(zhí)行結(jié)果作為cmd2參數(shù)杆煞,再將cmd2結(jié)果作為cmd3的參數(shù)
cmd3 $(cmd2 $(cmd1))
 
# 如果是用反引號(hào),直接引用是不行的腐泻,還需要作跳脫處理
cmd3 `cmd2 \`cmd1\`

${ }變量替換
一般情況下决乎,$var${var}是沒(méi)有區(qū)別的,但是用${ }會(huì)比較精確的界定變量名稱(chēng)的范圍

A=B
echo ${A}B
結(jié)果:BB

取路徑派桩、文件名构诚、后綴

先賦值一個(gè)變量為一個(gè)路徑,如下:
file=/dir1/dir2/dir3/my.file.txt

命令 解釋 結(jié)果
${file#*/} 拿掉第一條 / 及其左邊的字符串 dir1/dir2/dir3/my.file.txt
${file##*/} 拿掉最后一條 / 及其左邊的字符串 my.file.txt
${file#*.} 拿掉第一個(gè) . 及其左邊的字符串 file.txt
${file##*.} 拿掉最后一個(gè) . 及其左邊的字符串 txt
${file%/*} 拿掉最后一條 / 及其右邊的字符串 /dir1/dir2/dir3
${file%%/*} 拿掉第一條 / 及其右邊的字符串 (空值)
${file%.*} 拿掉最后一個(gè) . 及其右邊的字符串 /dir1/dir2/dir3/my.file
${file%%.*} 拿掉第一個(gè) . 及其右邊的字符串 /dir1/dir2/dir3/my

記憶方法如下:
(1) # 是去掉左邊(在鍵盤(pán)上#$ 之左邊)
(2) % 是去掉右邊(在鍵盤(pán)上 %$ 之右邊)
(3) 單一符號(hào)是最小匹配;兩個(gè)符號(hào)是最大匹配
(4) *是用來(lái)匹配不要的字符铆惑,也就是想要去掉的那部分
(5) 還有指定字符分隔號(hào)范嘱,與*配合,決定取哪部分

取子串及替換

命令 解釋 結(jié)果
${file:0:5} 提取最左邊的 5 個(gè)字節(jié) /dir1
${file:5:5} 提取第 5 個(gè)字節(jié)右邊的連續(xù) 5 個(gè)字節(jié) /dir2
${file/dir/path} 將第一個(gè) dir 提換為path /path1/dir2/dir3/my.file.txt
${file//dir/path} 將全部 dir 提換為path /path1/path2/path3/my.file.txt
${#file} 獲取變量長(zhǎng)度 27

根據(jù)狀態(tài)為變量賦值

命令 解釋 備注
${file-my.file.txt} $file 沒(méi)設(shè)定,則使用 my.file.txt 作傳回值 空值及非空值不作處理
${file:-my.file.txt} $file 沒(méi)有設(shè)定或?yàn)榭罩?則使用 my.file.txt 作傳回值 非空值時(shí)不作處理
${file+my.file.txt} $file 設(shè)為空值或非空值,均使用my.file.txt作傳回值 沒(méi)設(shè)定時(shí)不作處理
${file:+my.file.txt} $file 為非空值,則使用 my.file.txt 作傳回值 沒(méi)設(shè)定及空值不作處理
${file=txt} $file 沒(méi)設(shè)定,則回傳 txt ,并將 $file 賦值為 txt 空值及非空值不作處理
${file:=txt} $file 沒(méi)設(shè)定或空值,則回傳 txt ,將 $file 賦值為txt 非空值時(shí)不作處理
${file?my.file.txt} $file 沒(méi)設(shè)定,則將 my.file.txt 輸出至 STDERR 空值及非空值不作處理
${file:?my.file.txt} $file沒(méi)設(shè)定或空值,則將my.file.txt輸出至STDERR 非空值時(shí)不作處理
tips:

以上的理解在于, 你一定要分清楚 unset 與 null 及 non-null 這三種賦值狀態(tài). 一般而言, : 與 null 有關(guān), 若不帶 : 的話, null 不受影響, 若帶 : 則連 null 也受影響.

數(shù)組

A="a b c def"   # 定義字符串
A=(a b c def)   # 定義字符數(shù)組
命令 解釋 結(jié)果
${A[@]} 返回?cái)?shù)組全部元素 a b c def
${A[*]} 同上 a b c def
${A[0]} 返回?cái)?shù)組第一個(gè)元素 a
${#A[@]} 返回?cái)?shù)組元素總個(gè)數(shù) 4
${#A[*]} 同上 4
${#A[3]} 返回第四個(gè)元素的長(zhǎng)度员魏,即def的長(zhǎng)度 3
A[3]=xyz 則是將第四個(gè)組數(shù)重新定義為xyz a b c xyz
$(( ))與整數(shù)運(yùn)算

bash中整數(shù)運(yùn)算符號(hào)

符號(hào) 功能
+ - * / 分別為加丑蛤、減、乘撕阎、除
% 余數(shù)運(yùn)算
& l ^ ! 分別為“AND受裹、OR、XOR、NOT”

$(( )) 中的變量名稱(chēng),可于其前面加 $ 符號(hào)來(lái)替換,也可以不用棉饶。

$ a=5;b=7;c=2
$ echo $((a+b*c))
19
$ echo $(($a+$b*$c))
19
進(jìn)制轉(zhuǎn)換

$(( ))可以將其他進(jìn)制轉(zhuǎn)成十進(jìn)制數(shù)顯示出來(lái)厦章。用法如下:
echo $((N#xx))
其中,N為進(jìn)制照藻,xx為該進(jìn)制下某個(gè)數(shù)值袜啃,命令執(zhí)行后可以得到該進(jìn)制數(shù)轉(zhuǎn)成十進(jìn)制后的值。

$ echo $((2#110))   # 二進(jìn)制轉(zhuǎn)十進(jìn)制
6
$ echo $((16#2a))   # 十六進(jìn)制轉(zhuǎn)十進(jìn)制
42
$ echo $((8#11))    # 八進(jìn)制轉(zhuǎn)十進(jìn)制
9
(( ))重定義變量值
$ a=5;b=7
$ ((a++));echo $a
6
$ ((a--));echo $a
5

$ ((a<b));echo $?
0
使用(( ))作整數(shù)測(cè)試時(shí)幸缕,不要跟[ ]的整數(shù)測(cè)試搞混亂了群发。

Reference

https://blog.csdn.net/number_0_0/article/details/73291182

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市发乔,隨后出現(xiàn)的幾起案子熟妓,更是在濱河造成了極大的恐慌,老刑警劉巖列疗,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滑蚯,死亡現(xiàn)場(chǎng)離奇詭異浪蹂,居然都是意外死亡抵栈,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)坤次,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)古劲,“玉大人,你說(shuō)我怎么就攤上這事缰猴〔” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵滑绒,是天一觀的道長(zhǎng)闷堡。 經(jīng)常有香客問(wèn)我,道長(zhǎng)疑故,這世上最難降的妖魔是什么杠览? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮纵势,結(jié)果婚禮上踱阿,老公的妹妹穿的比我還像新娘。我一直安慰自己钦铁,他們只是感情好软舌,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著牛曹,像睡著了一般佛点。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上黎比,一...
    開(kāi)封第一講書(shū)人閱讀 49,806評(píng)論 1 290
  • 那天恋脚,我揣著相機(jī)與錄音腺办,去河邊找鬼。 笑死糟描,一個(gè)胖子當(dāng)著我的面吹牛怀喉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播船响,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼躬拢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了见间?” 一聲冷哼從身側(cè)響起聊闯,我...
    開(kāi)封第一講書(shū)人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎米诉,沒(méi)想到半個(gè)月后菱蔬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡史侣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年拴泌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惊橱。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚪腐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出税朴,到底是詐尸還是另有隱情回季,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布正林,位于F島的核電站泡一,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏觅廓。R本人自食惡果不足惜鼻忠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哪亿。 院中可真熱鬧粥烁,春花似錦、人聲如沸蝇棉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)篡殷。三九已至钝吮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奇瘦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工棘催, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耳标。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓醇坝,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親次坡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子呼猪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 著名財(cái)經(jīng)雜志《財(cái)富》對(duì)本書(shū)的評(píng)論是:如果你一生只讀一本關(guān)于投資的著作,無(wú)疑就是這本《聰明的投資者》砸琅。 首先介紹一下...
    惜她閱讀 6,819評(píng)論 0 34
  • https://quan.qq.com/circle?circleid=q_21051121022_1427099...
    風(fēng)果閱讀 133評(píng)論 0 0
  • 也許是我大智若愚入戲太久 你才會(huì)認(rèn)為我本就是那么low 不過(guò) 我也不會(huì)取下我的低能面具 讓你看清而愛(ài)上我的優(yōu)秀 只...
    鈴蘭空地閱讀 150評(píng)論 8 0
  • 如果一切是因你所犯下的錯(cuò)誤宋距,你應(yīng)該為此付出所有的代價(jià). 如果這不是真的,你會(huì)覺(jué)得這個(gè)世界一切都會(huì)很美好. 如果把所...
    趙趙ZO閱讀 319評(píng)論 1 1