
私は bash コードに取り組んでおり、ファイル ( ) がファイル より新しいCheckOtherFiles
かどうかを確認するために使用されると思われる関数を見つけました。$1
$WS_ROOT/$NomeVista/COMP/COMP_COMPILE
CheckOtherFiles
絶対パスを持つファイルである 1 つのパラメータで呼び出されます。
コードは次のとおりです:
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