1つのコマンドで変数を設定してエクスポートするのではなく、最初に変数を設定してからエクスポートするのはなぜですか?

1つのコマンドで変数を設定してエクスポートするのではなく、最初に変数を設定してからエクスポートするのはなぜですか?

実行すると、シェルがgpg-agent直接処理できるデータを出力します。たとえば、次のようになります。

SSH_AUTH_SOCK=/tmp/ssh-apeOFqMF3292/agent.3292; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3293; export SSH_AGENT_PID;
echo Agent pid 3293;

なぜこのようなことをするのかgpg-agent?私はより多くのプログラムがこれを行うのを見ました。以前のシェルはこれをサポートしていませんかexport var=val?組み込みの交換シェルをサポートしていないシェルは何ですか?

私はKubuntuでbashを使用しています。

ベストアンサー1

従来のBourneシェルはそれらを組み合わせることをサポートしていません(System Vではこれを省略できますが、;4.2BSD / SunOSシェルではそうではありません)。これはKornシェル(exportBourneシェルとのcshクロスオーバーsetenv)によって追加され、その後他のシェルとPOSIX.2に採用されました。多くの商用UnixはまだBourneシェルのSystem Vバリアントを提供しているので、/bin/sh互換性を維持することは移植性にとって良い考えです。

おすすめ記事