Tôi đã viết một kịch bản nhỏ ngày hôm nay có chứa
grep -q ^local0 /etc/syslog.conf
Trong quá trình xem xét, một đồng nghiệp đề nghị ^local0
được trích dẫn vì ^
có nghĩa là "đường ống" trong vỏ Bourne. Ngạc nhiên trước tuyên bố này, tôi đã cố gắng theo dõi bất kỳ tài liệu tham khảo nào đề cập đến điều này. Không có gì tôi tìm thấy trên internet cho thấy đây là một vấn đề.
Tuy nhiên, hóa ra việc triển khai bsh
(tự xưng là vỏ Bourne) trên AIX 7 thực sự có hành vi này:
> bsh
$ ls ^ wc
23 23 183
$ ls | wc
23 23 183
Không có cách triển khai "vỏ Bourne" nào khác mà tôi đã thử hành xử theo cách này (nghĩa ^
là hoàn toàn không được coi là một siêu vi khuẩn vỏ). Tôi đã thử sh
trên CentOS (thực sự là bash) và sh
trên FreeBSD (không phải là bash). Tôi không có nhiều hệ thống khác để thử.
Là hành vi này được mong đợi? Những vỏ nào được coi ^
là một metacharacter ống?
[ x"$foo" = x"bar" ]
.
bsh
Nó không phải là Bourne Shell. Tên này chỉ bị lạm dụng cho Bourne Shell trên AIX. bsh
đúng hơn là một cái vỏ được tôi giới thiệu vào năm 1984 tại H.Berkeep AG trên UNOS (bản sao UNIX đầu tiên). Lưu ý rằng AIX không tồn tại vào năm 1984.
^
là một nhân vật phủ định trong zsh và cả trong không gian regex. Là một nhận xét riêng biệt, thông thường nên sử dụng các trích dẫn đơn trong biểu thức grep cho tính di động trên các shell.