Shell

為什麼 echo call as /bin/sh -c echo foo 不輸出任何東西?

  • January 26, 2017

例如,雖然這有效:

迴聲富
富

這不會:

$ /bin/sh -c echo foo

而這樣做:

$ /bin/sh -c 'echo foo; 迴聲吧'
富
酒吧

有解釋嗎?

man sh

-c string   If the -c option is present, then commands are read from string. 
           If there are arguments after the string, they are assigned to the
           positional parameters, starting with $0

這意味著你的命令應該是這樣的:

$ sh -c 'echo "$0"' foo 
foo

相似地:

$ sh -c 'echo "$0 $1"' foo bar
foo bar

這是首先要理解的部分;我猜第二種情況很簡單,不需要解釋。

$ echo foo
foo

此呼叫echo帶有參數foo並列印foo 。

$ /bin/sh -c echo foo

這將使用參數呼叫 shellecho並提供foo作為參數 $0。輸出一個新行,echo您丟棄foo。如果要輸出foo,請引用參數:

sh -c 'echo foo'

或使用提供的參數:

sh -c 'echo $0' foo

在這個例子中

$ /bin/sh -c 'echo foo; echo bar'
foo
bar

echo foo; echo bar使用輸出的參數呼叫 shell

foo
bar

引用自:https://unix.stackexchange.com/questions/253422