Shell
為什麼 echo call as /bin/sh -c echo foo 不輸出任何東西?
例如,雖然這有效:
迴聲富 富
這不會:
$ /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
這將使用參數呼叫 shell
echo
並提供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
使用輸出的參數呼叫 shellfoo bar