我今天写了一个小脚本,其中包含
grep -q ^local0 /etc/syslog.conf
在审查过程中,一位同事建议^local0
引用该词,因为^
在Bourne外壳中意为“烟斗”。对此声明感到惊讶,我试图查找提及此内容的任何参考。我在互联网上没有发现任何暗示这是问题的信息。
但是,事实证明,bsh
在AIX 7上的实现(声称是Bourne shell)实际上具有以下行为:
> bsh
$ ls ^ wc
23 23 183
$ ls | wc
23 23 183
我尝试过的其他“ Bourne shell”实现^
都没有这种行为的方式(也就是说,根本不被认为是shell元字符)。我sh
在CentOS(实际上是bash)和sh
FreeBSD(不是bash)上进行了尝试。我没有很多其他系统可以尝试。
这是预期的行为吗?哪些壳被认为^
是管道元字符?
[ x"$foo" = x"bar" ]
。
bsh
不是伯恩壳牌。该名称仅在AIX上的Bourne Shell中被滥用。bsh
而是我在1984年由H.Berhold AG在UNOS(第一个UNIX克隆)上引入的shell。请注意,AIX在1984
^
是zsh和正则表达式空间中的否定字符。作为单独的注释,通常建议在grep表达式中使用单引号,以实现跨shell的可移植性。