Bash: ¿cuál es el significado de ${parameter##word}

Bash: ¿cuál es el significado de ${parameter##word}

Estoy trabajando en el código bash y encontré una función CheckOtherFilesque supongo se usa para verificar si un archivo ( $1) es más reciente que el archivo $WS_ROOT/$NomeVista/COMP/COMP_COMPILE.

CheckOtherFilesse 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-nty -otpruebas:

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

información relacionada