/ / Bash if文の構文エラー[duplicate] - bash

Bash if文の構文エラー[duplicate] - bash

私はなぜこれが文法エラーを出すのかということについて喪失しています。

#!/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 ] ;