`env foo=bar echo $foo` は何も印刷しません。

`env foo=bar echo $foo` は何も印刷しません。

心が複雑になると思います。私は希望

env foo=bar echo $foo

...printsがbar空白行が表示されます。ワット。

bash構文を使用すると同じことが起こります。

foo=bar echo $foo

答え1

同様の質問に回答しました最近:シンボルはその行で定義される前にその行で評価されるため、行を区切るにはシンボルの定義と使用を分離する必要があります。

説明に従って、次のようにすることができます。

foo=bar bash -c 'echo $foo'

まず、値を割り当て、fooそれを印刷可能な環境変数として新しいプロセスに渡します。

これについての詳細は、POSIX Shell Command Languageで読むことができます。トークン認識

次からフォロー@mikeservコメント:

  • POSIXは完全な答えを提供するほど明確ではありません。
  • 引用された部分の先頭には次のように記載されています。

    シェルはファイルの入力を行で、対話型シェルの端末から、またはsh -cまたはsystem()の文字列として読み取る必要があります。

  • 最後に、それは言う

    トークンが区別されると、Shell Grammarの文法要件に従って分類されます。

  • しかし、POSIXは言わない明らかに構文を処理する前に、行全体がトークン化されます。
  • この場合、私たちは既存の慣行に頼っています。シェルは作成された標準と矛盾するものがないため、準拠していますが、標準を使用してすべての状況で動作を予測することはできません。
  • もちろん、エイリアスの動作にも同じ説明が適用されます(これが私がエイリアスと呼ぶ理由です)。似たような質問)。

関連情報