
Estoy trabajando en el código bash y encontré una función CheckOtherFiles
que supongo se usa para verificar si un archivo ( $1
) es más reciente que el archivo $WS_ROOT/$NomeVista/COMP/COMP_COMPILE
.
CheckOtherFiles
se llama con un parámetro que es un archivo con ruta absoluta.
Aquí está el 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
}
Leí el manual de bash y encontréesteenlace útil, pero no está claro el significado de:
if [[ ${filecheck##*/} = ${fver##*/} ]]
También dudo que haya un error en ello.
Entonces, ¿podrías ayudarme a comprender el significado de este fragmento de código?
También aprecio mucho cualquier sugerencia para mejorar esta función.
Respuesta1
Como se responde en la pregunta vinculada, esto eseliminación de subcadenas:
${string##substring}
Deletes longest match of $substring from front of $string.
En este caso, se trata de eliminar el camino y retener sólo elbasename
:
$ FILE=/etc/default/google-chrome
$ echo ${FILE##*/}
google-chrome
$ basename $FILE
google-chrome
Normalmente, me quedaría con basename
, pero es una cuestión de opinión si el código de solo escritura es mejor si es más rápido. En cualquier caso no veo ningún error en ello.
Sin embargo, se podría considerar la-nt
y -ot
pruebas:
f1 -nt f2
file f1 is newer than f2
f1 -ot f2
file f1 is older than f2
Y quizás simplificarlo a:
other_file="$WS_ROOT/$NomeVista/COMP/COMP_COMPILE"
if [[ -r $fver && -r $other_file && ( $fver -nt $otherfile ) ]]
then
return 1
fi
return 0