Shell

一個管道可以復合命令嗎?

  • March 15, 2022

我的問題是:一個管道可以/如何復合命令({ 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.

引用自:https://unix.stackexchange.com/questions/694436