Những ký hiệu này trong một số lệnh đầu cuối Linux có nghĩa là gì? [đóng cửa]


12

Trên AskUbfox, tôi đã thấy một vài lệnh xung quanh trông khá phức tạp, với rất nhiều biểu tượng trong đó. Để hiểu rõ hơn về cách các lệnh này được xây dựng, tôi muốn biết các biểu tượng đại diện cho điều gì.

Ví dụ:

find ~/ -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;

hoặc thậm chí phức tạp hơn:

echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m"

Tôi hiểu rất rõ rằng việc thêm các thông số như -c, --debug, có tác dụng nhất định trên commmand chính. Ý nghĩa của những điều này trong hầu hết các trường hợp được tìm thấy trong các mantrang, vì vậy đó không thực sự là những gì tôi đang tìm kiếm.

Xin vui lòng, hãy thử trong câu trả lời của bạn để xác định những biểu tượng cụ thể làm gì, thay vì giải thích các ví dụ tôi đã đưa ra. Điều đó có thể trông như thế này:

" means 'argument': the main command uses anything within these symbols as its source
^ is used for ...
# is used for ...

Cảm ơn trước


Tôi nghĩ rằng điều đó phụ thuộc vào lệnh -c -Dcó thể có nghĩa gì đó trong lệnh 1 và một điều hoàn toàn khác trong lệnh 2.
Uri Herrera

hey bạn đã thay đổi lệnh 1? Bản chỉnh sửa ở đâu: X
Rinzwind

Tôi đã thay đổi nhận xét đầu tiên, bởi vì nó đang giữ những thứ không có thông tin. Tôi muốn đưa ra các ví dụ tương đối nhất có thể. Tôi đã thực hiện một bình luận chỉnh sửa trong phần thích hợp cho điều đó. Cảm ơn các công cụ -c -D, tôi hiểu điều đó. Tôi cập nhật câu hỏi.
Tăng tốc-G

Câu trả lời:


14

Xem phần Hướng dẫn tham khảo Bash có tên Shell-OperationAdvanced Bash-Scripting Guide Chương 3 (Các ký tự đặc biệt) .

Tôi đề cập đến những điều đó bất cứ lúc nào tôi cần để tìm hiểu một cái gì đó mới về kịch bản shell trong ubfox / linux.

Tôi nghĩ rằng bạn sẽ tìm thấy ABS Chương 3 dễ điều hướng nhất cho mục đích của bạn. Tất cả các biểu tượng được nhìn thấy ở phía bên trái của trang với một mô tả ngay bên dưới chúng.


Hướng dẫn Bash-Scripting nâng cao - Chương 3 rất hay. Cảm ơn.
Tăng tốc-G

Danh sách trong chương 3 của hướng dẫn bash-scripting nâng cao không đầy đủ và sai một phần. Hướng dẫn Advanced Bash Scripting không phải là một tài nguyên tốt để học bash. Thay vào đó, hãy xem mywiki.wooledge.org/BashGuidemywiki.wooledge.org/BashFAQ .
geirha

@geirha Tôi thấy ABS rất hữu ích, nhưng đối với các ký hiệu trong một lệnh cụ thể, tôi thích xem các trang man thay vào đó và các liên kết của bạn cũng rất tuyệt - được đánh dấu. Cảm ơn.
SaultDon

7

Thật không may, bạn phải vào trang man, vì "biểu tượng" có thể có ý nghĩa khác nhau tùy thuộc vào lệnh nào đang đọc chúng.

Chẳng hạn, trong lệnh đầu tiên của bạn, ý nghĩa của {} và \; phụ thuộc vào lệnh find (man find). Ý nghĩa của các trích dẫn về một đối số đối với sed phụ thuộc vào sed hoặc bash (vì đó là một tham số được trích dẫn, nó có khả năng có thể là một thứ vỏ). ~ / Chắc chắn là một điều mở rộng mô hình bash.

Đối với lệnh phức tạp thứ hai, đó chủ yếu là tiếng vang, vì vậy bạn sẽ tìm thấy hầu hết thông tin trên trang đó của bash.

Để trả lời nhận xét của bạn về vấn đề này, các ký tự chuyển hướng> <| được sử dụng để chuyển các nội dung từ và vào các tệp (lớn hơn và nhỏ hơn các dấu hiệu) và để kết nối đầu ra của lệnh với đầu vào của người khác (đường ống |). Xem ở đây để có một hướng dẫn tốt đẹp về chuyển hướng I / O, đây là một tính năng thiết kế rất mạnh mẽ của trình bao và bộ công cụ Unix.


OK, còn bạn thì >sao? Đó là một dấu hiệu tôi thường xuyên thấy, tôi nghĩ nó có nghĩa là 'bản sao' hoặc một cái gì đó. Đây có phải là một phụ thuộc vào lệnh không?
Tăng tốc-G


3

Người đầu tiên tìm kiếm các tệp kết thúc .ctừ trong thư mục ~/executes sed(trình soạn thảo hợp lý) nơi sed stìm kiếm cybernetnewsvà thay đổi nó thành cybernet.

Cái thứ hai gợi cho tôi ... hiển thị một kết quả trống khi được thực thi.


Điều đó rất có thể, bởi vì nó được lấy từ một câu hỏi khác ở đây. Không có bối cảnh, nó có lẽ không làm gì cả.
Tăng tốc-G

2

Tài nguyên tốt nhất tôi tìm thấy để học các lệnh đầu cuối là LinuxCommand , nó cung cấp các mô tả chi tiết về các lệnh được sử dụng nhiều nhất hiện có.


liên kết xấu, xin vui lòng cập nhật hoặc xóa.
flyingdrifter

2

Thật khó để nói cho bạn biết ý nghĩa đầy đủ của các biểu tượng khi bạn dán các lệnh phức tạp.

Tiếng vang nói riêng.

Xem người đàn ông lặp lại cho -e, nó cho phép thoát, vì vậy muộn hơn \ e là một lối thoát.

Phần lớn các biểu tượng khác là các thao tác chuỗi.

Vì vậy, hãy tưởng tượng bạn có một biến, tôi chứa một chuỗi "foo"

i=foo;echo $i
foo

Nhưng nó trở nên phức tạp hơn nếu biến của bạn, $ i, cũng là một phần của chuỗi

echo $ibar # Note: no output

echo ${i}bar # we have output
foobar

Bây giờ bạn cũng có thể thao tác các chuỗi, chỉ in một phần

Trong trường hợp của bạn

$ {i # * =} = in $ i, Loại bỏ kết quả khớp ngắn nhất giữa * và =, nhưng * chính nó là ký tự đại diện ..

echo ${i#o}
foo

echo ${i#*o}
o

Xem http://tldp.org/LDP/abs/html/opes-manipulation.html

Tiếp theo, chúng tôi nhấn một vỏ phụ (x ...)

Bash sẽ xử lý các lệnh trong shell phụ và trả về đầu ra của các lệnh.

x = (một chuỗi con của i); tiếp tục

Bây giờ chúng tôi có một bài kiểm tra, ["$ {! X}"]

Xem: http://tldp.org/LDP/abs/html/testconstructs.html

Và đây là nơi tôi có thể nói với bạn không còn nữa.

Trong bash, $ {! X} sẽ là một chuỗi rỗng. && == logic và || là hợp lý hoặc

kiểm tra {chuỗi rỗng} VÀ lặp lại chuỗi trống hoặc echo x

Bạn sẽ cần đưa ra nhiều cú pháp hơn, nhưng có vẻ như tiếng vang này đang dẫn đầu ra ở đâu đó.

Một lần nữa [] là một bài kiểm tra, và chúng tôi đã thoát khỏi [ngay từ đầu.

Vì vậy, tôi chỉ có thể giải thích rất nhiều về những gì echo đang làm.

Lý do tại sao không có đầu ra khi bạn nhập lệnh echo trong thiết bị đầu cuối là vì nó là một đoạn mã, theo mặc định, không x hoặc i được xác định, vì vậy tất cả đầu ra đều trống.


1

Đối với các câu hỏi về các biểu tượng trong các ngôn ngữ cụ thể, bạn có thể muốn dùng thử SymbolHound. Bạn có thể tìm kiếm trên web các ký tự mà Google không tìm thấy.

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.