Chức năng (về mặt đầu ra), hai giá trị này giống nhau. Việc đầu tiên thực sự tạo ra một quá trình riêng biệt cat
mà chỉ đơn giản là gửi nội dung của tập tin đầu ra tiêu chuẩn, trong đó cho thấy trên đầu vào tiêu chuẩn của grep
, bởi vì vỏ đã kết nối hai với một đường ống.
Trong ý nghĩa đó, grep regex <filename
cũng tương đương nhưng với một quy trình ít hơn.
Tại nơi bạn sẽ bắt đầu thấy sự khác biệt là trong các biến thể khi thông tin thêm (tên tập tin) là sử dụng bởi grep
, chẳng hạn như với:
grep -n regex filename1 filename2
Sự khác biệt giữa đó và:
cat filename1 filename2 | grep -n regex
là cựu biết về các tập tin cá nhân trong khi sau này thấy nó như là một tập tin (không có tên).
Trong khi trước đây có thể cung cấp cho bạn:
filename1:7:line with regex in 10-line file
filename2:2:another regex line
sau này sẽ được nhiều hơn như:
7:line with regex in 10-line file
12:another regex line
Một thực thi hoạt động khác nếu nó biết tên tập tin là wc
, các các chương trình truy cập từ:
$ cat qq.in
1
2
3
$ wc -l qq.in # knows file so prints it
3 qq.in
$ cat qq.in | wc -l # does not know file
3
$ wc -l <qq.in # also does not know file
3
+1: pedant (ví dụ như tôi) có thể tranh luận rằng 'cat' luôn ghi vào đầu ra tiêu chuẩn của nó, nhưng trong ngữ cảnh của đường ống, đầu ra tiêu chuẩn của nó là đầu viết của một đường ống. Tương tự, khi 'grep' được gọi không có đối số tên tệp hoặc khi nó xử lý đối số tên tệp của' -', nó sẽ đọc đầu vào tiêu chuẩn của nó, trong trường hợp này, là đầu đọc của đường ống. Lưu ý rằng 'pipe' hoặc' | 'không phải là một lệnh; nó không phải là khá rõ ràng cho dù bạn nhận ra rằng với 'để ống chuyển tiếp đầu vào của nó như là đầu ra cho quá trình shell mới'. –