予期しないトークン `( 'の近くのエラーメッセージ構文エラーは、Unixタイプの環境、Cygwin、およびWindowsのコマンドラインインターフェースで発生します。このエラーは、編集されたシェルスクリプトを実行しようとしたとき、または古いDOS / WindowsまたはMacシステムで作成されました。

このエラーメッセージは、ファイルを手動でコピーするなどの日常的なタスクのためにLinuxコマンドラインでコマンドを入力するときにも表示されます。このエラーメッセージが発生する主な理由は、構文が正しくないか、OSが別のシステムのコマンドを解釈する際の問題が原因です。シェル。
予期しないトークン `( 'の近くで構文エラーが発生する原因は何ですか?
このエラーメッセージの理由は非常に多様であり、コマンドの実行時に構文が失敗する可能性が何千もあるため、1つの記事に記載することはできません。このエラーの主な理由は次のとおりです。
- いずれかのプラットフォームでコマンドを実行すると、構文が正しくありません。コマンドを正しく使用していないか、間違った構文を入力しています。
- シェルはUnix / DOSシステム間で互換性がありません。
- 別のソースからbashシェルスクリプトを実行すると問題が発生します。
この記事では、読者がコーディングの基本を理解し、自分が何をしているかを理解していることを前提としています。初心者の場合は、実行しようとしている言語/コマンドの詳細なチュートリアルに従うことをお勧めします。おそらく、いくつかの構文に誤りがあります。
解決策1:コマンドの構文と形式を確認する
このエラーメッセージが表示される最初の最も重要な理由は、コードの構文が間違っているか、コマンドの正確な形式に従っていないことです。各コマンドには、ドキュメントで確認できる定義済みの形式があります。いくつかのパラメーターはオプションですが、その他は必須です。
さらに、余分なスペース、二重引用符の使用、および必須の必須パラメーターについては、さらに注意が必要です。それらのいずれかが欠落しているか、正しく宣言されていない場合、コードを実行できません。
たとえば、次のコードの代わりに
[mycom7]#./ctopo.sh um_test1 [(1,2)、(2,1)]
あなたはそれを次のように実行する必要があります
[mycom7]#./ctopo.sh um_test1 "[(1,2)、(2,1)]"
また、コマンド/シェルスクリプトが複数行にわたる場合は、コマンド/シェルスクリプトを正しく実行していることを確認してください。
パラメータタイプのため、二重引用符が必要です。余分なスペースがあると、コードが台無しになり、エラーメッセージが表示される場合があります。実行しているコマンドの公式ドキュメントを確認し、問題がないか確認してください。
解決策2:シェルスクリプトのトラブルシューティング
ソースシステムで動作するがターゲットでエラーを返すシェルスクリプトを使用している場合は、実行中に保存されている変数を確認して問題の原因を確認することで、スクリプトをトラブルシューティングできます。これは非常に一般的な原因です。いくつかのケースでは、シェルが印刷できない文字を解釈しようとするためです。
'vx'のパラメーターでシェルを実行してみてください。これにより、実行されているコマンドとスクリプトに格納されている値がわかります。ここから、問題のトラブルシューティングと診断を行うことができます。
たとえば、次のように 'vx'を含めた後、ターミナルでスクリプトを実行します。
#sh -vx ./test_script5.sh
次のように「cat」コマンドを使用して、スクリプトの内容を確認できます。
#cat test_script5.sh
解決策3: 'dos2unix.exe'コマンドを使用する
Windows / DOSテキストファイルでは、改行はキャリッジリターン(\ r)とそれに続く改行(\ n)の組み合わせです。Mac(Mac OS Xより前)では、改行は単純な復帰(\ r)を使用していました。Unix / LinuxおよびMac OS Xは、改行(\ n)改行を使用します。Cygwinを使用している場合、余分なキャリッジリターン(\ r)文字が原因で、DOS / Windowsおよび古いMacで作成されたスクリプトの処理に失敗します。

ここで、スクリプトを正しい形式に変換する 'dos2unix.exe'コマンドを作成し、問題なく実行できます。
結論として、コマンドと使用しているプラットフォームのタイプを調査し、矛盾がないことを確認する必要があります。あらゆる可能性をカバーすることはできないため、発生する可能性のあるエラーの種類とそれらを修正する方法を理解しているはずです。