在 shell command line 中,一般人或許不太計較 ( ) 與 這兩對符號的差異,
雖然兩者都可將多個命令作群組化處理,但若從技術細節上,卻是很不一樣的:
( ) 將 command group 置於 sub-shell 去執行,也稱 nested sub-shell。
則是在同乙個 shell 內完成,也稱為 non-named command group。
在 bash shell 中,$( ) 與 ` ` (反引號) 都是用來做命令替換用(command substitution)
的。為了完整起見,我這裡再用一些例子加以說明 $ 的一些特異功能:
假設我們定義了乙個變數為:
file=/dir1/dir2/dir3/my.file.txt
我們可以用 $ 分別替換獲得不同的值:
$:拿掉第一條 / 及其左邊的字串:dir1/dir2/dir3/my.file.txt
$:拿掉最後一條 / 及其左邊的字串:my.file.txt
$:拿掉第乙個 . 及其左邊的字串:file.txt
$:拿掉最後乙個 . 及其左邊的字串:txt
$:拿掉最後條 / 及其右邊的字串:/dir1/dir2/dir3
$:拿掉第一條 / 及其右邊的字串:(空值)
$:拿掉最後乙個 . 及其右邊的字串:/dir1/dir2/dir3/my.file
$:拿掉第乙個 . 及其右邊的字串:/dir1/dir2/dir3/my
記憶的方法為:
# 是去掉左邊(在鑑盤上 # 在 $ 之左邊)
% 是去掉右邊(在鑑盤上 % 在 $ 之右邊)
單一符號是最小匹配;兩個符號是最大匹配
利用 $ 還可針對不同的變數狀態賦值(沒設定、空值、非空值):
$ :假如 $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 輸出至 stderr。 (非
空值時不作處理)
$ 可計算出變數值的長度:
$ 可得到 27 ,因為 /dir1/dir2/dir3/my.file.txt 剛好是 27 個位元組...
一般而言,a="a b c def" 這樣的變數只是將 $a 替換為乙個單一的字串,
但是改為 a=(a b c def) ,則是將 $a 定義為組數...
bash 的組數替換方法可參考如下方法:
$ 或 $ 可得到 a b c def (全部組數)
$ 可得到 a (第乙個組數),$ 則為第二個組數...
好了,最後為大家介紹 $(( )) 的用途吧:它是用來作整數運算的。
在 $(( )) 中的變數名稱,可於其前面加 $ 符號來替換,也可以不用,如:
$ a=5; b=7; c=2
$ echo $(( 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) 的返回值。
常見的用於 (( )) 的測試符號有如下這些:
<:小於
>:大於
<=:小於或等於
>=:大於或等於
==:等於
!=:不等於
參考《shell十三問》
linux之shell學習 sort使用
sort命令是幫我們依據不同的資料型別進行排序,其語法及常用引數格式 sort bcfmnrtk 原始檔 o 輸出檔案 參 數 b 忽略每行前面開始出的空格字元。c 檢查檔案是否已經按照順序排序。f 排序時,忽略大小寫字母。m 將前面3個字母依照月份的縮寫進行排序。n 依照數值的大小排序。o 輸出檔...
shell學習之 與 差在哪
在解答本章題目之前,先讓我們了解乙個概念 return value 我們在 shell 下跑的每乙個 command 或 function 在結束的時候都會傳回父行程乙個值,稱為 return value 在 shell command line 中可用 這個變數得到最 新 的乙個 return v...
shell指令碼的學習之萬用字元的使用
本文介紹 1 萬用字元的使用,用於對 檔案 的檢索 2 和 的其它用法 作為test命令的簡寫 萬用字元 正文 一類是匹配任意數量的字元 一類是匹配單個數量的字元 任意匹配 都是加了範圍的匹配 命令 ls l a c 必須說明一下,符號 中間的字母順序是aabbccdd 比如,上面的 a c 截斷的...