$ sudo sh -c "FOO=bar echo Result:${FOO}"
Result:
FOOに保存されている値が表示されないのはなぜですか?
${FOO}を呼び出す前にbashが置き換えられるためsudoです。したがって、sh -c実際に表示されるのは次のとおりです。
FOO=bar echo Result:
しかもやってみても
FOO=bar echo Result:${FOO}
それでも動作しません1。それを正しくするために、あなたはすることができます:
FOO=bar; echo Result:${FOO}
これで修正されたので、に戻りましょうsh -c。bashがあなたが与えている文字列を解釈するのを防ぐために、:の代わりにsh -cそれを単に入れてください:'"
sudo sh -c 'FOO=bar; echo Result:${FOO}'
1 理由についてはコメントを参照してください。
FOO変数が次のコマンドに設定されているため、これは機能しませんechoが${FOO}、を囲むシェルに置き換えられます。
それを機能させたい場合はFOO、囲んでいるシェルの変数を設定し、echo ...を一重引用符で囲む必要があります
sudo FOO=bar sh -c 'echo Result:${FOO}'