如何检查 ksh 脚本的语法错误?

如何检查 ksh 脚本的语法错误?
$ cat foo.sh 
#!/bin/ksh

echo foo
ehco foo2

它不会警告错误:

$ /bin/ksh -n foo.sh 
$ echo $?
0

问题:如何让“ksh -n”警告我语法错误?

答案1

这不是实际 ksh 语法的语法错误,而是仅在运行时捕获的无效命令名称的语法错误。当你运行它时,你会得到命令未找到错误。

如果您添加:

echo foo                                                                        
ehco foo2

if [ 1 -lt 0 ]                                                                  
then                                                                            
    echo 123                                                                    
done                                                                            

然后运行:

$ ksh -n foo.sh 
foo.sh: syntax error at line 9: `done' unexpected

答案2

如果该脚本中有语法错误,您会在 stderr 上看到它们。ksh -n是正确的事情。一个例子:

$ cat script.ksh
touch tmpfile
for f in tmpfile   # missing "do"
  rm $f
done
$ ksh script.ksh
script.ksh: syntax error at line 3: `rm' unexpected
$ ls -l tmp*
-rw-rw-r-- 1 glennj glennj 0 Jul 22 06:54 tmpfile
$ rm tmpfile
$ ksh -n script.ksh
script.ksh: syntax error at line 3: `rm' unexpected
$ ls -l tmp*
ls: cannot access tmp*: No such file or directory

因此,脚本已被解析但未执行(文件未创建)

相关内容