歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

$()和${}和$(())和(())

$()和${}和$(())和(())   $()和${}的用法: 在 bash shell 中,$( ) 與 ` ` (反引號) 都是用來做命令替換用(command substitution)的。而 $( ) 並不見的每一種 shell 都能使用,若你用 bash2 的話,肯定沒問題...   看 ${ } 吧... 它其實就是用來作變量替換用的啦。一般情況下,$var 與 ${var} 並沒有啥不一樣。但是用 ${ } 會比較精確的界定變量名稱的范圍。   我這裡再用一些例子加以說明 ${ } 的一些特異功能: 假設我們定義了一個變量為: file=/dir1/dir2/dir3/my.file.txt 我們可以用 ${ } 分別替換獲得不同的值: ${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 記憶的方法為: # 是去掉左邊(在鑒盤上 # 在 $ 之左邊) % 是去掉右邊(在鑒盤上 % 在 $ 之右邊)   單一符號是最小匹配﹔兩個符號是最大匹配。 ${file:0:5}:提取最左邊的 5 個字節:/dir1 ${file:5:5}:提取第 5 個字節右邊的連續 5 個字節:/dir2   我們也可以對變量值裡的字符串作替換: ${file/dir/path}:將第一個 dir 提換為 path:/ path1/dir2/dir3/my.file.txt ${file//dir/path}:將全部 dir 提換為 path:/ path1/path2/path3/my.file.txt   利用 ${ } 還可針對不同的變量狀態賦值(沒設定、空值、非空值): ${file-my.file.txt} :假如 $file 沒有設定,則使用 my.file.txt 作傳回值。(空值及非空值時不作處理) ${file:-my.file.txt} :假如 $file 沒有設定或為空值,則使用my.file.txt 作傳回值。 (非空值時不作處理) ${file+my.file.txt} :假如 $file 設為空值或非空值,均使用my.file.txt作傳回值。(沒設定時不作處理) ${file:+my.file.txt} :若 $file 為非空值,則使用 my.file.txt 作傳回值。(沒設定及空值時不作處理) ${file=my.file.txt} :若 $file 沒設定,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (空值及非空值時不作處理) ${file:=my.file.txt} :若$file沒設定或為空值,則使用my.file.txt作傳回值,同時將 $file 賦值為my.file.txt 。(非空值時不作處理) ${file?my.file.txt} :若 $file 沒設定,則將 my.file.txt 輸出至STDERR。 (空值及非空值時不作處理) ${file:?my.file.txt} :若 $file 沒設定或為空值,則將 my.file.txt 輸出至 STDERR。 (非空值時不作處理) 以上的理解在於, 你一定要分清楚 unset 與 null 及 non-null 這三種賦值狀態. 一般而言, : 與 null 有關, 若不帶 : 的話, null 不受影響, 若帶 : 則連null 也受影響.   還有哦,${#var} 可計算出變量值的長度: ${#file} 可得到 27 ,因為 /dir1/dir2/dir3/my.file.txt 剛好是 27 個字節...     $(())的用途: 它是用來作整數運算的。 在 bash 中,$(( )) 的整數運算符號大致有這些: + - * / :分別為 "加、減、乘、除"。 % :余數運算 & | ^ !:分別為 "AND、OR、XOR、NOT" 運算。 舉例: wangnc>a=5;b=7;c=2; wangnc>echo $a + $b 5 + 7 wangnc>echo $(( a + b*c)) 19 wangnc>echo $(((a*b)/c)) 17 wangnc>echo $(($a +$b*$c)) 19 wangnc>   在 $(( )) 中的變量名稱,可於其前面加 $ 符號來替換,也可以不用,如: $(( $a + $b * $c)) 也可得到 19 的結果   此外,$(( )) 還可作不同進位(如二進制、八進位、十六進制)作運算呢,只是,輸出結果皆為十進制而已: echo $((16#2a)) 結果為 42 (16進位轉十進制)     (())的用途: 事實上,單純用 (( )) 也可重定義變量值,或作 testing: a=5; ((a++)) 可將 $a 重定義為 6 a=5; ((a--)) 則為 a=4 a=5; b=7; ((a < b)) 會得到 0 (true) 的返回值。 常見的用於 (( )) 的測試符號有如下這些: <:小於 >:大於 <=:小於或等於 >=:大於或等於 ==:等於 !=:不等於
 
Copyright © Linux教程網 All Rights Reserved