Báo giá lồng nhau trong subshells


13

Nói rằng tôi phải sử dụng dấu ngoặc kép để đóng gói đầu ra của subshell như:

DATA="$(cat file.hex | xxd -r)"

Nhưng tôi cần lồng những thứ như thế này:

DATA="$(cat file.hex | xxd -r | tr -d \"$(cat trim.txt)\")"

Tôi không thể sử dụng các trích dẫn đơn vì chúng không mở rộng các biến bên trong chúng. Thoát dấu ngoặc kép không hoạt động vì chúng chỉ được coi là văn bản thụ động.

Làm thế nào để tôi xử lý này?


Tại sao bạn không sử dụng DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"?
cuonglm

Câu trả lời:


19

Bạn không cần phải thoát các trích dẫn bên trong một lớp con, vì lớp vỏ hiện tại không diễn giải chúng (thực tế nó không diễn giải bất cứ điều gì từ $(đến )), và lớp con không biết về bất kỳ trích dẫn nào ở trên.

Việc trích dẫn một subshell khi gán biến cũng không cần thiết, để biết thêm thông tin xem man bash.


1
Nó phụ thuộc vào những gì bạn đang cố gắng làm, nhưng đó thường là cách tốt nhất. Xem github.com/koalaman/shellcheck/wiki/Sc2086
LPCRoy

8

Bạn không cần phải thoát khỏi dấu ngoặc kép bên trong. Họ được phân tích cú pháp đúng cách, đáng ngạc nhiên!

DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"
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.