
我正在研究 bash 程式碼,我發現了一個函數CheckOtherFiles
,我猜它是用來檢查 file ( $1
) 是否比 file 更新的$WS_ROOT/$NomeVista/COMP/COMP_COMPILE
。
CheckOtherFiles
使用一個參數調用,該參數是具有絕對路徑的檔案。
這是代碼:
function CheckOtherFiles {
fver=$1
if [[ -r $fver ]]
then
if [[ -r $WS_ROOT/$NomeVista/COMP/COMP_COMPILE ]]
then
filecheck=`/bin/ls -1t $fver $WS_ROOT/$NomeVista/COMP/COMP_COMPILE | head -1`
if [[ ${filecheck##*/} = ${fver##*/} ]]
then
return 1
fi
fi
fi
return 0
}
我閱讀了 bash 手冊並發現這有用的鏈接,但不清楚其含義:
if [[ ${filecheck##*/} = ${fver##*/} ]]
我也懷疑其中有什麼錯誤。
那麼,您能幫我理解這段程式碼的含義嗎?
我也非常感謝任何改進此功能的建議。
答案1
正如鏈接問題中的回答,這是子字串刪除:
${string##substring}
Deletes longest match of $substring from front of $string.
在這種情況下,它會刪除路徑並僅保留basename
:
$ FILE=/etc/default/google-chrome
$ echo ${FILE##*/}
google-chrome
$ basename $FILE
google-chrome
通常,我會堅持使用basename
,但如果只寫程式碼更快,是否更好,這是一個觀點問題。無論如何,我沒有看到其中有任何錯誤。
不過,您可以考慮-nt
和-ot
測試:
f1 -nt f2
file f1 is newer than f2
f1 -ot f2
file f1 is older than f2
也許可以簡化為:
other_file="$WS_ROOT/$NomeVista/COMP/COMP_COMPILE"
if [[ -r $fver && -r $other_file && ( $fver -nt $otherfile ) ]]
then
return 1
fi
return 0