与えられた入力ファイルが読み取ることができ、一般的でシンボリックリンクではないことを確認するために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 にのみ適用され、値はありません。