Syntax error near unexpected token の解決方法

Syntax error near unexpected token の解決方法

「Syntax error near unexpected token」というエラーは、シェルスクリプトやコマンドラインでスクリプトを実行中に発生します。このエラーは、予期しないトークン(記号やキーワード)が入力されていることが原因で発生します。主にBashなどのシェルスクリプトで発生することが多いエラーですが、他のコマンドラインツールでも見かけることがあります。この記事では、このエラーの原因とその解決方法について詳しく説明します。

エラーの発生条件

  • コマンドの文法が誤っている
  • 予期しない場所で記号やトークンが使われている
  • 括弧や引用符が正しく閉じられていない
  • 無効な変数参照が行われている
  • コマンドの順序が間違っている

シンタックスエラーを確認する

最初に確認すべきは、スクリプトやコマンドの文法です。シンタックスエラーは、通常コマンドやスクリプト内の文法的な誤りが原因です。エラーメッセージに記載されている「unexpected token」の前後をよく確認し、文法ミスを特定します。

// 例: 文法エラー
echo "Hello, World!"
echo "This is a test" // 予期しないトークンのエラー

括弧や引用符が閉じられていない

開いた括弧や引用符が正しく閉じられていない場合、このエラーが発生することがあります。特にシェルスクリプトでは、閉じるべき括弧や引用符を閉じ忘れることが多いため、これを確認しましょう。

// 引用符や括弧が閉じられていない例
echo "Hello World // エラーが発生

無効な変数参照

変数の参照方法に誤りがある場合にも、このエラーが発生することがあります。特に、変数を使う際のスペースや展開方法に注意が必要です。

// 変数展開エラー
VAR="test"
echo $VAR // 正しい変数参照
echo $ VAR // 不正な変数参照

シェルスクリプト内のコマンド順序

シェルスクリプト内のコマンドの順序が間違っていると、予期しないトークンのエラーが発生することがあります。コマンドの配置が正しいか確認しましょう。

// コマンド順序が誤っている場合
cd /path/to/directory && echo "Done"
cd /path/to/directory echo "Done" // エラーになる

無効なシェルオプションの使用

無効なシェルオプションを使っている場合にも、このエラーが発生します。シェルが受け付けないオプションを指定していないか確認しましょう。

// シェルオプションエラー
bash --invalid-option script.sh // 無効なオプションを使用した例

不要なスペースの削除

コマンドや変数の前後に不要なスペースがあると、シンタックスエラーが発生することがあります。特に引数の間に不要なスペースがあると、予期しないトークンエラーが発生します。

// 不要なスペースがある例
echo "Hello" "World" // 正しい
echo "Hello" " World" // 不要なスペース

スクリプトのデバッグ

スクリプトが長くなり、エラーの原因がわからなくなった場合、`bash -x` コマンドを使ってスクリプトのデバッグを行うことができます。このオプションを使うことで、どの部分でエラーが発生しているのか追跡できます。

// デバッグモードを使ってエラーを追跡
bash -x script.sh

シェルバージョンの確認

使用しているシェルのバージョンが古い場合、新しい構文に対応していないことがあります。シェルのバージョンを確認し、必要に応じてアップデートします。

// シェルのバージョンを確認
bash --version

サンプルコードの確認

エラーが発生しているスクリプトに問題がある場合、簡単な修正で解決できることがあります。以下は、よくあるエラーの修正例です。

// 修正前のコード
if [ $var -eq 5 ]
echo "var is 5"
fi // 括弧が欠けている

// 修正後のコード
if [ $var -eq 5 ]; then
  echo "var is 5"
fi // 正しい構文