คำพูดซ้อนใน subshells


13

ว่าฉันต้องใช้อัญประกาศเพื่อสรุปผลลัพธ์ subshell เช่น:

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

แต่ฉันต้องทำรังสิ่งเช่นนี้:

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

ฉันไม่สามารถใช้เครื่องหมายคำพูดเดี่ยวได้เพราะสิ่งเหล่านั้นไม่ได้ขยายตัวแปรที่อยู่ข้างใน การหลีกเลี่ยงการพูดไม่ทำงานเพราะมันเป็นเสมือนข้อความแฝง

ฉันจะจัดการสิ่งนี้ได้อย่างไร


ทำไมคุณไม่ใช้DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"?
cuonglm

คำตอบ:


19

คุณไม่จำเป็นต้องหลบเลี่ยงอัญประกาศภายใน subshell เนื่องจากเชลล์ปัจจุบันไม่ได้แปลความหมายเหล่านั้น (มันไม่ได้แปลความหมายอะไรจาก$(ไปยัง)จริง ๆ ) และsubshellไม่ทราบเกี่ยวกับคำพูดใด ๆ ที่อยู่ด้านบน

เธซเธฑ subshell man bashที่กำหนดตัวแปรที่ไม่จำเป็นมากเกินไปสำหรับข้อมูลเพิ่มเติมโปรดดูที่


1
ขึ้นอยู่กับสิ่งที่คุณพยายามจะทำ แต่โดยทั่วไปแล้วมันเป็นการปฏิบัติที่ดีที่สุด ดูgithub.com/koalaman/shellcheck/wiki/Sc2086
LPCRoy

8

คุณไม่จำเป็นต้องหลบหนีจากคำพูดซ้อนภายใน พวกเขาได้รับการแยกวิเคราะห์อย่างถูกต้องน่าแปลกใจ!

DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.