
Я работаю над кодом 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