在 Bash 中提取檔案基本名稱
Fumbani Banda
2023年1月30日
2022年5月11日
本教程展示了使用子字串引數擴充套件和 basename
命令提取檔案基本名稱的不同方法。
在 Bash 中使用子字串引數擴充套件提取檔案基名
Bash 中的引數是儲存值的元素。擴充套件是用它的值替換引數引用。
要在 Bash 中進行引數擴充套件,請在引數名稱前加上 $
字元。將引數名稱括在花括號中是可選的。
引數擴充套件的兩個符號如下所示。
$parameter
${parameter}
在引數擴充套件的花括號內,一些運算子可以與它們的引數一起新增。運算子放置在引數名稱之後和右花括號之前。
我們可以將這些運算子用於條件、子字串、子集、字首列表、元素計數和大小寫修改擴充套件。這些運算子只修改引數而不修改引數的值。
下面的指令碼使用子字串引數擴充套件來通過字串模式匹配提取子字串。使用的語法是 ${parameter##pattern}
。
##
指定模式應該從字串的左側開始匹配,*/
是我們案例中的模式。在這種情況下,${path##*/}
匹配來自 path
變數的最後一個/
並返回剩餘的子字串 file1.txt
。
path=/home/delftstack/test/file1.txt
echo "${path##*/}"
執行指令碼會將檔名列印到標準輸出。
file1.txt
在 Bash 中使用 basename
命令提取檔案基本名稱
basename
是 Linux 中的一個命令,它返回給定檔案路徑作為引數的最後一個元素。在下面的指令碼中,basename
命令被賦予以檔案路徑作為引數的 path
變數。該指令碼使用命令替換來執行 basename
命令。
命令替換是 Bash 的一項功能,它允許我們執行 Linux 命令並將命令的輸出儲存在變數中。使用此功能執行命令後,該命令的標準輸出將替換該命令,並刪除任何尾隨換行符。
basename
命令的輸出替換命令本身並分配給 fname
變數。printf
命令用於將 fname
變數的內容顯示到標準輸出。
path=/home/delftstack/test/file1.txt
fname=$(basename "$path")
printf $fname
printf "\n"
該指令碼在執行後顯示以下輸出。
file1.txt
Author: Fumbani Banda