Bash: каково значение $ {parameter##word}

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

Я прочитал руководство удара и нашел эту полезную ссылку, но это неясно значение:

   if [[ ${filecheck##*/} = ${fver##*/} ]]

Я также сомневаюсь, что существует ошибка в нем.

Так, Вы могли помочь мне понимающий значение этой части кода?

Также я действительно ценю любое предложение для улучшения этой функции.

1
задан 23 May 2017 в 15:39

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
1
ответ дан 7 December 2019 в 16:28

Другие вопросы по тегам:

Похожие вопросы: