我有以下问题:
当我在终端窗口中直接执行以下脚本时,命令按预期运行。
$ diff <(echo tmp) <(echo tmp1)
1c1
< tmp
---
> tmp1
但是当我在shell脚本中编写相同的命令时
#! /bin/bash
diff <(echo tmp) <(echo tmp1)
我收到以下错误消息:
$ sh test.sh
test.sh: line 2: syntax error near unexpected token `('
test.sh: line 2: ` diff <(echo tmp) <(echo tmp1)'
最初我认为这是diff的一个问题,但这也适用于其他命令。有没有人知道导致问题的原因是什么?
答案 0 :(得分:5)
尝试
bash test.sh
或
chmod ugo+x test.sh
./test.sh
当我这样做时,对我来说很好。
看起来bourne shell(sh)不支持该语法。
答案 1 :(得分:1)
使用sh
调用bash时,它会以特殊的POSIX兼容模式启动。这有不同的语法,我想解释不同的结果。
请参阅bashref of POSIX mode,#22:“流程替换不可用”。
答案 2 :(得分:0)
这种语法看起来并不熟悉。你确定你在终端使用bash吗?您可以输入echo $SHELL
。