Shell
一個管道可以復合命令嗎?
我的問題是:一個管道可以/如何復合命令(
{ list; }
)?見附件 B。為了比較而給出的附件 A。展品 A:
$ cat << EOF | xargs -n 1 echo foo bar qux EOF foo bar qux
展品 B:
$ cat << EOF | xargs -n 1 sh -c '{ var="$1"; echo "$var"; }' foo bar qux EOF
man sh
:-c Read commands from the command_string operand instead of from the standard input. Special parame‐ ter 0 will be set from the command_name operand and the positional parameters ($1, $2, etc.) set from the remaining argument operands.
問題是
sh -c "something"
需要另一個參數成為$0
。你的第二個例子沒有提供一個,所以
$1
是一個空字元串,你得到你的 3 個空行。利用cat << EOF | xargs -n 1 sh -c '{ var="$1"; echo "$var"; }' inlineshellscript foo bar qux EOF food bar qux
在腳本
$0
中是inlineshellscript
. 通常我會使用sh
而不是inlineshellscript
.