
Estou trabalhando no código bash e encontrei uma função CheckOtherFiles
que acho que é usada para verificar se um file ( $1
) é mais recente de file $WS_ROOT/$NomeVista/COMP/COMP_COMPILE
.
CheckOtherFiles
é chamado com um parâmetro que é um arquivo com caminho absoluto.
Aqui está o código:
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
}
Eu li o manual do bash e descobriesselink útil, mas não está claro o significado de:
if [[ ${filecheck##*/} = ${fver##*/} ]]
Também duvido que haja um erro nisso.
Então, você poderia me ajudar a entender o significado deste trecho de código?
Também agradeço muito qualquer sugestão para melhorar esta função.
Responder1
Conforme respondido na pergunta vinculada, isso éremoção de substring:
${string##substring}
Deletes longest match of $substring from front of $string.
Neste caso, está retirando o caminho e retendo apenas obasename
:
$ FILE=/etc/default/google-chrome
$ echo ${FILE##*/}
google-chrome
$ basename $FILE
google-chrome
Normalmente, eu continuaria basename
, mas é uma questão de opinião se o código somente gravação é melhor se for mais rápido. De qualquer forma, não vejo erro nisso.
No entanto, você pode considerar o-nt
e -ot
testes:
f1 -nt f2
file f1 is newer than f2
f1 -ot f2
file f1 is older than f2
E talvez simplifique para:
other_file="$WS_ROOT/$NomeVista/COMP/COMP_COMPILE"
if [[ -r $fver && -r $other_file && ( $fver -nt $otherfile ) ]]
then
return 1
fi
return 0