shell學習之()與 的使用

2021-06-25 13:05:41 字數 2308 閱讀 8433

在 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 截斷的...