0
$ sudo sh -c "FOO=bar echo Result:${FOO}"
Result:

FOOに保存されている値が表示されないのはなぜですか?

4

2 に答える 2

4

${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 理由についてはコメントを参照してください。

于 2013-03-08T17:33:07.710 に答える
1

FOO変数が次のコマンドに設定されているため、これは機能しませんecho${FOO}、を囲むシェルに置き換えられます。

それを機能させたい場合はFOO、囲んでいるシェルの変数を設定し、echo ...を一重引用符で囲む必要があります

sudo FOO=bar sh -c 'echo Result:${FOO}'
于 2013-03-08T19:11:55.213 に答える