sh与csh中的算符优先顺序

• 本文约 170 字,阅读大致需要 1 分钟 | Development

第一个脚本(1.sh):
#!/bin/sh
echo test
exit 1

测试命令:./1.sh | grep test && echo 1

csh:
./1.sh | grep test && echo e
test

sh:
./1.sh | grep test && echo e
test
e

原因

测试程序存在两个严重问题,导致csh和sh产生不同的结果。

第一个问题:Unix系统假定程序正常结束时返回码为0。
第二个问题:测试脚本语义不明确。

如果将测试脚本修改为:
./1.sh | ( grep test && echo e )

则语义明确,因此csh和sh会得到一样的结果。