我不知道为什么会出现语法错误。有什么想法吗?
#!/bin/bash
if [ `date +%H` -lt 11 ] ; then exit 0;
fi
if [ `date +%H` -gt 14 ] ; then
if[ `date +%H` -lt 20 ] ; then # <--- this line is the culprit, it seems
exit 0;
fi
fi
跑步时,我得到:
./get.sh: line 7: syntax error near unexpected token `then'
./get.sh: line 7: ` if[ `date +%H` -lt 20 ] ; then '
答案 0 :(得分:4)
这是语法错误的原因是[
不是shell语法的一部分;它实际上是一个命令。最初它只是test
命令的符号链接。它仍然是,但它也是bash和其他Bourne派生shell中的内置命令。
if
是一个shell关键字,但是shell会看到if[
,而不是if
。因为它没有看到if
,所以当它看到then
时它不知道该怎么做。 (实际上,它确切地知道该怎么做:打印语法错误消息。)
...
一些实验表明它并不像我想象的那么简单。我尝试创建一个名为if[
的命令,并将其放在我$PATH
的目录中。当我在提示符下键入if[
时,shell会要求输入更多内容。我实际上不知道它在寻找什么,但显然[
字符是由shell专门处理的。 shell不会将if[
拆分为if
关键字和[
命令(根据其他语言的工作方式,您可能会合理地预期)。 (如果我真的想执行该命令,我可以输入\if[
或"if["
- 或者首先给它一个合理的名称。
无论如何,最后一部分可能并不重要;添加空格字符将解决问题。
答案 1 :(得分:1)
在[
if [ `date +%H` -lt 20 ]
答案 2 :(得分:1)
if[ `date +%H` -lt 20 ] ;
您需要在if
if [ `date +%H` -lt 20 ] ;