シェル割り当てでダッシュで始まる式はどういう意味ですか?

シェル割り当てでダッシュで始まる式はどういう意味ですか?

スクリプトファイルでJAVA_OPTS = -Xms1024m -Xmx1024m ...を試しました。 「-Xmx1024m:コマンドが見つかりません」などのエラーが表示されます。

二重引用符または一重引用符で課題を引用すると、エラーは消えます。

最初のダッシュでエラーが発生したことがわかりました。 "a = -bb xx yy ..."などのすべての割り当ては同じエラーを生成するため、xxをプログラムとして実行しようとします。最初の単語がダッシュで始まり、割り当て式に引用符がない場合、シェルは2番目の単語をコマンドとして認識するように見えます。

だから私の質問は:シェルでダッシュで始まる割り当て式はどういう意味ですか?私は基本的にbashを使います。

答え1

まず、変数を引用する必要があります。

JAVA_OPTS="-Xms1024m -Xmx1024m"

変数は引用されていないため、元のコマンドの変数割り当てとJAVA_OPTS=-Xms1024mコマンド名としてのみ解釈されます。-Xmx1024mこれはコマンドの環境変数設定とも呼ばれます。例えば、

LC_ALL=C  date +%s

date設定が変更する環境が使用されますLC_ALL=C(つまりdate、他を設定しても英語のロケールで実行)。ここで違いに注意してください。 LC_ALL = Cにはスペースがないため、単語の区切りは発生しません。これは次の場合に発生します。JAVA_OPTS=-Xms1024m -Xmx1024m

第二に、ダッシュはオプションの短いスタイルを表します。bash --posixまたはのような長いスタイルもありますls --format=long。なぜダッシュなのか歴史的実践。 POSIX標準では、短いバージョンのコマンドライン引数だけが必要であることに注意してください。

関連情報