我的问题是:一根管道可以/如何复合命令 ( { list; }
)?请参阅附录 B。附录 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.
答案1
问题是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
.