+ Có nghĩa là gì trong lệnh bash `-exec {} +`?


0

Đối với cấu trúc lệnh -exec command {} \;, tôi có thông tin trong man find.

  1. {} có nghĩa là selected files.
  2. ; có nghĩa là hủy bỏ lập luận.
  3. \; thoát ra để bảo vệ chúng khỏi sự bành trướng của vỏ.

Trong đoạn liên quan đến -exec command {} +.

 -exec command {} +
              This  variant  of the -exec action runs the specified command on
              the selected files, but the command line is built  by  appending
              each  selected file name at the end; the total number of invoca
              tions of the command will  be  much  less  than  the  number  of
              matched  files.   The command line is built in much the same way
              that xargs builds its command lines.  Only one instance of  `{}'
              is  allowed  within the command, and (when find is being invoked
              from a shell) it should be quoted (for example, '{}') to protect
              it  from  interpretation  by shells.  The command is executed in
              the starting directory.  If any invocation  returns  a  non-zero
              value  as exit status, then find returns a non-zero exit status.
              If find encounters an error, this can sometimes cause an immedi‐
              ate  exit, so some pending commands may not be run at all.  This
              variant of -exec always returns true.

Nó không bao giờ nói điều gì trên +, + có nghĩa là gì trong bash -exec command {} +?
Nó có nghĩa là chấm dứt các đối số như ;?
+có nghĩa là cộng như , 3+5=8hoặc concatenate, để nối hai chuỗi thành một, chẳng hạn như s1+ s2.
Đó là một điều kỳ lạ để gán một ý nghĩa terminate the argumentcho +.


Điều này đã được giải thích khá tốt qua tại SO Thủ tướng Chính ở đây, stackoverflow.com/questions/6085156/... Và tại Unix SE đây, unix.stackexchange.com/questions/195939/...
Uberfuzzy

Câu trả lời:


1

Nó không liên quan gì đến Bash, đó là một phần của findcú pháp. Lệnh phải biết -exechành động kết thúc ở đâu. Nó kết thúc tại ;hoặc tại +. Tùy thuộc vào ký tự kết thúc, một biến thể -exechành động thích hợp được sử dụng.

Tại sao hai nhân vật này được chọn cho mục đích này? Tôi không biết. Một số cách để kết thúc -exectuyên bố là phải và ai đó đã chọn ;+. Bây giờ các ký tự là một phần của tiêu chuẩn POSIX khi nói đến findlệnh.

Chúng tôi chỉ có thể đoán rằng ;đã được chọn vì nó cũng có thể chấm dứt một lệnh trong shell, vì vậy mục đích là tương tự. Vì lý do này, tuy nhiên, ;điều đó cần phải được nhìn thấy findphải được xử lý đặc biệt trong vỏ, do đó \;( ';'hoặc ";"cũng hoạt động). Không có vấn đề như vậy với +.

Về mặt kỹ thuật, hầu như bất kỳ chuỗi nào khác có thể đã được chọn thay vì +(giống với ;). Lưu ý rằng -exec, {}, +;(sau khi nó đi nhờ vỏ để thoát hoặc trích dẫn), kiểm tra khả năng hoặc hành động như -typehoặc -print- tất cả họ đều đối số find; chúng trở nên có ý nghĩa khi findxử lý chúng, ý nghĩa của chúng đến từ cách findđược phát minh.

Để tóm tắt:

  1. Đó là về find, không phải về bash.
  2. Công cụ hỗ trợ hai -exechành động hơi khác nhau .
  3. Để phân biệt chúng, chúng tôi sử dụng hai đối số khác nhau để chấm dứt -execcâu lệnh; đó là một sự lựa chọn thiết kế
  4. Hai đối số khác nhau là ;+; đó là một sự lựa chọn thiết kế
  5. Những lựa chọn này có thể đã được thực hiện khác nhau. Ngay cả khi có một câu chuyện đằng sau +(mà tôi không biết), đó là chuyện vặt, không phải là điều gì đó thực sự có ý nghĩa. Tôi chỉ có thể suy đoán {} +là "một đối số trở lên" như 10+ đôi khi có nghĩa là "mười hoặc nhiều hơn".

Cái nhìn sâu rộng hơn

+có nghĩa là cộng như , 3+5=8hoặc concatenate, để nối hai chuỗi thành một, chẳng hạn như s1+ s2. Đó là một điều kỳ lạ để gán một ý nghĩa chấm dứt đối số cho +.

Làm thế nào về

>có nghĩa là "lớn hơn", đó là một điều kỳ lạ khi gán nghĩa "chuyển hướng" cho >.

"Có +nghĩa là cộng" không phải từ Thiên Chúa. Ai đó quyết định, những người khác làm theo và biểu tượng bị mắc kẹt.

  • Ai đó quyết định +có nghĩa là "cộng" trong toán học.
  • Ai đó quyết định >có nghĩa là "lớn hơn" trong toán học.
  • Ai đó quyết định >chuyển hướng trong một cái vỏ.
  • Ai đó quyết định +chấm dứt -exectrong findbối cảnh.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.