我想從我的bashrc中的函數的參數的完整路徑獲取文件的名稱。我不知道任何正則表達式,所以我有點失落。我知道我想獲得最後一個斜線,然後使用所有內容,但我不太確定如何去做。然後我想將它存儲在函數中的一個變量中,稍後我將使用它。從Unix中的完整路徑獲取文件名
任何幫助表示讚賞!
我想從我的bashrc中的函數的參數的完整路徑獲取文件的名稱。我不知道任何正則表達式,所以我有點失落。我知道我想獲得最後一個斜線,然後使用所有內容,但我不太確定如何去做。然後我想將它存儲在函數中的一個變量中,稍後我將使用它。從Unix中的完整路徑獲取文件名
任何幫助表示讚賞!
的最快方式是使用變量替換像
f1=/my/big/long/path/to/a/little/bitty/file
f2=./my/big/long/path/to/a/little/bitty/file
f3=my/big/long/path/to/a/little/bitty/file
f4=file
echo ${f1##*/}
echo ${f2##*/}
echo ${f3##*/}
echo ${f4##*/}
# This is how you get value out
filename=${f1##*/}
輸出;
file
file
file
file
您可以使用basename
但是這將是緩慢的,因爲它會推出一個新的子進程。
也許使用basename $file_path
我認爲你正在尋找basename
也許最簡單的方法是:
PATH=/my/big/long/path/to/a/little/bitty/file
FILENAME=`basename $PATH`
echo $FILENAME
將輸出 '文件'
您應同時報出輸入到basename
和它的輸出,以防其中任何一個具有有意義的字符,如空格在其中。
file_basename="$(basename "$filename")"
以下awk命令這是否:
259> which cna_update
/vobs/cna/bin/cna_update
262> which cna_update|awk -F"/" '{print $NF}'
cna_update
幹得漂亮!替代基本名稱! –
當路徑名稱是以'/'結尾的目錄時,它的行爲與基本名稱不同。這可能會或可能不會成爲問題,具體取決於使用情況。 'basename/foo/bar /'輸出**欄**,而'x =/foo/bar /; echo $ {x ## * /}'不輸出任何內容。 – Flimzy
如果你試圖提取文件名,那麼'/ foo/bar /'應該不會返回任何內容,因爲路徑中沒有文件名。所以邏輯上它是正確的。 – havexz