私はなぜこれが文法エラーを出すのかということについて喪失しています。
#!/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 "
回答:
回答№1は4これが構文エラーである理由は、 [
シェル構文の一部ではなく、実際にはコマンドです。もともとは、 test
コマンド。それはまだありますが、bashや他のBourne由来のシェルの組み込みコマンドでもあります。
if
は シェルキーワードですが、シェルは見ています if[
、ない if
。それは if
それが見えるときに何をすべきか分からない then
。 (実際には、何をすべきかを正確に知っています:構文エラーメッセージを出力します。)
...
私が思ったほど単純ではないことを実験によって示しています。 if[
それを私のディレクトリに置く $PATH
。私がちょうどタイプするとき if[
プロンプトでシェルは入力を求めます。私は実際にそれが何を探しているのか分からないが、明らかに [
文字はシェルによって特別に扱われます。シェルはちょうど分割しません if[
に if
キーワードと [
コマンド(他の言語の仕組みに基づいて合理的に期待しているように) (もし私が本当にそのコマンドを実行したいのであれば、 if[
または "if["
- または最初の場所に元気な名前を付けます。
いずれにしても、最後の部分はおそらく問題ではないので、スペース文字を追加すると問題が解決されます。
回答№2の場合は1
前にスペースを追加する [
if [ `date +%H` -lt 20 ]
回答№3の場合は1
if[ `date +%H` -lt 20 ] ;
後にスペースを入れる必要があります if
if [ `date +%H` -lt 20 ] ;