可以通过管道复合命令吗?

可以通过管道复合命令吗?

我的问题是:一根管道可以/如何复合命令 ( { 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

脚本中$0inlineshellscript.通常我会使用sh而不是inlineshellscript.

相关内容