This question already has answers here:
Difference between sh and bash

(12 个回答)


4年前关闭。




在终端(bash)中,以下工作正常:
cat <(echo "hello")

但如果我这样做:
sh -c 'cat <(echo "hello")'

我得到
sh: 1: Syntax error: "(" unexpected

你能解释一下原因吗?

顺便说一句,我的总体目标是在 shell 脚本中编写此命令:
watch -n 1 'cat <(iptables -L INPUT) <(iptables -L FORWARD)'

但它不起作用,原因似乎是上述问题。

最佳答案

sh 通常是 dash 而不是 bash(参见 man sh )。dash 不做进程替换,只做 POSIX 的东西。

你需要做:

  bash -c 'cat <(echo "hello")'
ksh & zsh 也可以进行进程替换。

使用您的示例,您可以简单地执行以下操作:
watch -n 1  'iptables -L INPUT;  iptables -L FORWARD'

不需要高级 shell 或进程替换。

关于bash - sh -c 和进程替换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39069179/

10-16 02:21