shell 變數匹配

2022-02-03 11:43:46 字數 1909 閱讀 1812

$$$

$$,$ 從右邊開始匹配

$,$ 從左邊開始匹配

$ ,$ 表示最短匹配,匹配到就停止,非貪婪

$,$ 是最長匹配

只有在pattern中使用了萬用字元才能有最長最短的匹配,否則沒有最 長最短匹配之分

結構中的pattern支援萬用字元

* 表示零個或多個任意字元

?表示零個或乙個任意字元

[...]表示匹配中括號裡面的字元

[!...]表示不匹配中括號裡面的字元

[root@bogon ~]# f=a.tar

.gz[root@bogon ~]# echo $

gz[root@bogon ~]# echo $

a[root@bogon ~]# var=abcdccbbdaa

[root@bogon ~]# echo $

abc[root@bogon ~]# echo $

abcdccbb

[root@bogon ~]# echo $

ccbbdaa

[root@bogon ~]# echo $

aa

假設我們定義了乙個變數為:

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

記憶的方法為:

# 是 去掉左邊(鍵盤上#在 $ 的左邊)

%是去掉右邊(鍵盤上% 在$ 的右邊)

單一符號是最小匹配;兩個符號是最大匹配

$:提取最左邊的5 個位元組:/dir1

$:提取第5 個位元組右邊的連續5個位元組:/dir2

也可以對變數值裡的字串作替換:

$:將第乙個dir 替換為path:/path1/dir2/dir3/my.file.txt

$:將全部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 輸出至stderr。(空值及非空值時不作處理)

$ :若$file 沒設定或為空值,則將my.file.txt 輸出至stderr。(非空值時不作處理)

$ 可計算出變數值的長度:

$ 可得到27 ,因為/dir1/dir2/dir3/my.file.txt 是27個位元組

變數 shell變數( )

變數型別 執行shell時,會同時存在三種變數 a 區域性變數 在指令碼或命令中定義,僅在當前shell例項中有效,其他shell啟動的程式不能訪問區域性變數。b 環境變數 所有的程式,包括shell啟動的程式,都能訪問環境變數,有些程式需要環境變數來保證其正常執行。必要時shell指令碼也可以定義...

shell萬用字元匹配

當輸入包含特殊字元 元字元 的部分檔名時,shell可以生成與已有檔名匹配的檔名。這些字元稱為萬用字元 wildcard 就像撲克牌中的王牌一樣無所不能。包含特殊字元的檔名稱為模糊檔案引用 ambiguous file reference 因為它們不引用任何乙個特定檔案。對這些檔名操作的過程稱為擴充...

Shell 使用Shell變數

變數是乙個字串,我們分配乙個值。分配的值可以是乙個數字,文字,檔名,裝置,或任何其他型別的資料。變數是沒有超過實際資料的指標。shell,可以建立,分配和刪除變數。變數的名稱可以包含只有字母 a到z或a到z 數字 0 9 或下劃線 按照慣例,unix的shell變數將有自己的名稱以大寫字母。下面的例...