$ 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}'