shell中$(( ))最住、$( )、``與${ }的區(qū)別

shell中$(())與$()還有${}的區(qū)別
$()與``(反引號)
在bash shell中怠惶,$()與``(反引號)都死用來做命令地替換用(command substitution)的。

命令替換與變量替換差不多轧粟,都是用來重組命令行的策治,先完成引號里的命令行,然后將其結(jié)果替換出來兰吟,再重組成新的命令行通惫。

exp 1

$ echo today is $(date "+%Y-%m-%d")
today is 2017-09-20
$()與``
在操作上,這兩者都是達到相應(yīng)的效果混蔼,但是建議使用$()履腋,理由如下:
  • ``很容易與''搞混亂,尤其對初學(xué)者來說惭嚣。
  • 在多層次的復(fù)合替換中遵湖,``必須要額外的跳脫處理(反斜線),而$( )比較直觀晚吞。
  • 最后延旧,$( )的弊端是,并不是所有的類unix系統(tǒng)都支持這種方式槽地,但反引號是肯定支持的迁沫。

exp2

# 將cmd1執(zhí)行結(jié)果作為cmd2參數(shù),再將cmd2結(jié)果作為cmd3的參數(shù)
cmd3 $(cmd2 $(cmd1))

# 如果是用反引號捌蚊,直接引用是不行的集畅,還需要作跳脫處理
cmd3 `cmd2 \`cmd1\``
${ }變量替換

一般情況下,$var與${var}是沒有區(qū)別的缅糟,但是用${ }會比較精確的界定變量名稱的范圍

$ A=B
$ echo ${A}B
BB
取路徑挺智、文件名、后綴

先賦值一個變量為一個路徑溺拱,如下:
file=/dir1/dir2/dir3/my.file.txt

命令 解釋 結(jié)果
${file#*/} 拿掉第一條/及其左邊的字符串 dir1/dir2/dir3/my.file.txt
${file##*/} 拿掉最后一條 / 及其左邊的字符串 my.file.txt
${file#*.} 拿掉第一個 . 及其左邊的字符串 file.txt
${file##*.} 拿掉最后一個 . 及其左邊的字符串 txt
${file%/*} 拿掉最后一條 / 及其右邊的字符串 /dir1/dir2/dir3
${file%%/*} 拿掉第一條 / 及其右邊的字符串 (空值)
${file%.*} 拿掉最后一個 . 及其右邊的字符串 /dir1/dir2/dir3/my.file
${file%%.*} 拿掉第一個 . 及其右邊的字符串 /dir1/dir2/dir3/my
記憶方法如下:
  • 是去掉左邊(在鍵盤上 # 在 $ 之左邊)

  • %是去掉右邊(在鍵盤上 % 在 $ 之右邊)
  • *單一符號是最小匹配;兩個符號是最大匹配
  • 還有指定字符分隔號逃贝,與*配合,決定取哪部分
取字符串及替換
命令 解釋 結(jié)果
${file:0:5} 提取最左邊的 5 個字節(jié) /dir1
${file:5:5} 提取第 5 個字節(jié)右邊的連續(xù) 5 個字節(jié) /dir2
${file/dir/path} 將第一個 dir 提換為 path /path1/dir2/dir3/my.file.txt
${file//dir/path} 將全部 dir 提換為 path /path1/path2/path3/my.file.txt
${#file} 獲取變量長度 27
根據(jù)狀態(tài)為變量賦值
命令 解釋 備注
${file-my.file.txt} 若 $file 沒設(shè)定,則使用 my.file.txt 作傳回值 空值及非空值不作處理
${file:-my.file.txt} 若 $file 沒有設(shè)定或為空值,則使用 my.file.txt 作傳回值 非空值時不作處理
${file+my.file.txt} 若$file 設(shè)為空值或非空值,均使用my.file.txt作傳回值 沒設(shè)定時不作處理
${file:+my.file.txt} 若 $file 為非空值,則使用 my.file.txt 作傳回值 沒設(shè)定及空值不作處理
${file=txt} 若 $file 沒設(shè)定,則回傳 txt ,并將 $file 賦值為 txt 空值及非空值不作處理
${file:=txt} 若 $file 沒設(shè)定或空值,則回傳 txt ,將 $file 賦值為txt 非空值時不作處理
${file?my.file.txt} 若 $file 沒設(shè)定,則將 my.file.txt 輸出至 STDERR 空值及非空值不作處理
${file:?my.file.txt} 若 $file沒設(shè)定或空值,則將my.file.txt輸出至STDERR 非空值時不作處理
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[@]} 返回數(shù)組全部元素 a b c def
${A[*]} 同上 a b c def
${A[0]} 返回數(shù)組第一個元素 a
${#A[@]} 返回數(shù)組元素總個數(shù) 4
${#A[*]} 同上 4
${#A[3]} 返回第四個元素的長度,即def的長度 3
A[3]=xyz 則是將第四個組數(shù)重新定義為 xyz
$(( ))與整數(shù)運算

bash中整數(shù)運算符號

符號 功能
+ - * / 分別為加句占、減沪摄、乘、除
% 余數(shù)運算
& | ^ ! 分別為“AND、OR杨拐、XOR祈餐、NOT”

在 $(( )) 中的變量名稱,可于其前面加 $ 符號來替換,也可以不用。

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

$(( ))可以將其他進制轉(zhuǎn)成十進制數(shù)顯示出來哄陶。用法如下:

echo $((N#xx))

其中帆阳,N為進制,xx為該進制下某個數(shù)值屋吨,命令執(zhí)行后可以得到該進制數(shù)轉(zhuǎn)成十進制后的值蜒谤。

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

使用(( ))作整數(shù)測試時,不要跟[ ]的整數(shù)測試搞混亂了至扰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鳍徽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子敢课,更是在濱河造成了極大的恐慌阶祭,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件直秆,死亡現(xiàn)場離奇詭異濒募,居然都是意外死亡,警方通過查閱死者的電腦和手機圾结,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門萨咳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人疫稿,你說我怎么就攤上這事培他。” “怎么了遗座?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵舀凛,是天一觀的道長。 經(jīng)常有香客問我途蒋,道長猛遍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任号坡,我火速辦了婚禮懊烤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宽堆。我一直安慰自己腌紧,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布畜隶。 她就那樣靜靜地躺著壁肋,像睡著了一般号胚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浸遗,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天猫胁,我揣著相機與錄音,去河邊找鬼跛锌。 笑死弃秆,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的髓帽。 我是一名探鬼主播驾茴,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼氢卡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起晨缴,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤译秦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后击碗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筑悴,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年稍途,在試婚紗的時候發(fā)現(xiàn)自己被綠了阁吝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡械拍,死狀恐怖突勇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坷虑,我是刑警寧澤甲馋,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站迄损,受9級特大地震影響定躏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜芹敌,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一痊远、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧氏捞,春花似錦碧聪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壤玫。三九已至,卻和暖如春哼凯,著一層夾襖步出監(jiān)牢的瞬間欲间,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工断部, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留猎贴,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓蝴光,卻偏偏與公主長得像她渴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蔑祟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法趁耗,類相關(guān)的語法,內(nèi)部類的語法疆虚,繼承相關(guān)的語法苛败,異常的語法,線程的語...
    子非魚_t_閱讀 31,587評論 18 399
  • 第一個生日 不在身邊但戚戚想念
    AAAAlex閱讀 479評論 0 49
  • 3月13日上午径簿,長興縣紅十字會分別為縣城街面首家“紅十字志愿服務(wù)點”——水木花都路(小區(qū))永安康福藥業(yè)連鎖店罢屈、商業(yè)...
    黃德有閱讀 135評論 0 0
  • “你老戳我干嘛!”王聲提高了音量篇亭。 張藝博摸了摸剛戳過王聲胸口的食指缠捌,想了想,“手感好译蒂÷拢” 王聲怒目而視。 王聲認...
    寒嘰嘰閱讀 890評論 1 1
  • 因為功血這個毛病折騰淇淇很多年柔昼,讓淇淇身心疲憊十嘿,總感覺活得辛苦,活得比同齡人健康人身體上更感辛苦一些岳锁。上學(xué)累绩衷,工作...
    寫故事的R閱讀 990評論 0 0