Bash: что означает ${parameter##word}

Bash: что означает ${parameter##word}

Я работаю над кодом bash и нашел функцию, CheckOtherFilesкоторая, как я полагаю, используется для проверки того, $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

Связанный контент