我的问题是:一个管道可以/如何复合命令({ 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 个空行。利用在脚本
$0
中是inlineshellscript
. 通常我会使用sh
而不是inlineshellscript
.