Tự động thay thế các ký tự đặc biệt trong đầu vào / bash?


0

Hãy nói rằng, tôi có những điều sau đây trong .bashrc của tôi

test1() { echo $@; }

và tôi muốn những thứ sau đây chạy trong terminal của tôi

test1 1 and (2 and 3)

cái nào nên xuất

1 and (2 and 3)

Nhưng điều này chỉ cho tôi một lỗi cú pháp, vì dấu ngoặc. Có cách nào để khắc phục điều này, ngoài việc sử dụng

test1 "1 and (2 and 3)"

? Có thể với lần đầu tiên thay thế tất cả các ký tự đặc biệt (như dấu ngoặc)?


Bạn phải bảo vệ các nhân vật đặc biệt bằng cách nào đó . Bạn sẽ không mong đợi test1 $HOMEmột cách kỳ diệu tránh việc mở rộng biến số (tôi hy vọng)
glenn jackman

Câu trả lời:


0

Bạn có thể xóa ý nghĩa đặc biệt của dấu ngoặc bằng dấu gạch chéo ngược:

test1 1 and \(2 and 3\)

Hoặc trích dẫn văn bản có dấu ngoặc:

test1 1 and "(2 and 3)"

0
kiểm tra1 "1 và (2 và 3)"

... sẽ cung cấp cho bạn đầu ra dự kiến.

Tham khảo: http://www.tldp.org/LDP/abs/html/abs-guide.html -> "Subshells"

Những gì bên trong parantheses không được trích dẫn trong bash, được đưa ra dưới dạng subshell, song song với shell hiện đang chạy.


0

Nó không hoàn toàn rõ ràng mục tiêu của bạn là gì. Cho rằng, đây có thể là những gì bạn muốn:

(shell prompt)$ test1() { printf "data? "; read -r tdata && printf "%s\n" "$tdata"; }
(shell prompt)$ 
(shell prompt)$ test1
data? 1 and (2 and 3)           (You type the part in bold.)
1 and (2 and 3)                 (Your test1 function repeats your input back to you.)
(shell prompt)$ 
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.