明らかな理由なしにブラケットが欠落しているエラー

明らかな理由なしにブラケットが欠落しているエラー

与えられた入力ファイルが読み取ることができ、一般的でシンボリックリンクではないことを確認するためにbash関数を作成していますが、括弧の欠落エラーが発生します。

function vfile(){
local infile=$1;
if [ ! $1 ]; then
        getname;
else
        getname $1;
fi;
if [ $? == 1 ]; then
        return;
else
infile=$fname;
fi;
if [ -f $infile && -r $infile ];
then
        if [ ! -h $infile ];
        then
                echo "$infile";
                (exit 0)
                return;
        else
                echo "$infile";
                (exit 1)
                return;
        fi;
else
        (exit 2)
        return;
fi
}

37行目でエラーが発生します。 ifステートメントに適切な間隔があるため、奇妙に見えます。これにより、これらのエラーが発生するようです。それでは、私が何を間違っているのでしょうか?

答え1

&&内部的にはサポートされていません[...]。変える:

if [ -f $infile && -r $infile ]

そして:

if [ -f "$infile" ] && [ -r "$infile" ]

また、単語の区切りとパス名の拡張を防ぐには、変数を二重引用符で囲む必要があります。

横に

より良い互換性のために、以下を交換してください。

function vfile(){

そして

vfile(){

この新しいフォームはすべてのPOSIXシェルで実行されます。このfunctionキーワードは bash にのみ適用され、値はありません。

関連情報