我正在编写一个 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 特定的并且没有任何价值。