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