无明显原因而导致的缺失括号错误

无明显原因而导致的缺失括号错误

我正在编写一个 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 shell 中运行。该function关键字是 bash 特定的并且没有任何价值。

相关内容