ตัวอย่างเช่น$PATHและ$HOME
เมื่อฉันพิมพ์echo $PATHมันจะส่งกลับของฉัน$PATHแต่ฉันต้องการที่จะสะท้อนคำ$PATHและไม่ใช่สิ่งที่ตัวแปรจริงหมายถึงecho "$PATH"ไม่ได้ทำงานอย่างใดอย่างหนึ่ง
ตัวอย่างเช่น$PATHและ$HOME
เมื่อฉันพิมพ์echo $PATHมันจะส่งกลับของฉัน$PATHแต่ฉันต้องการที่จะสะท้อนคำ$PATHและไม่ใช่สิ่งที่ตัวแปรจริงหมายถึงecho "$PATH"ไม่ได้ทำงานอย่างใดอย่างหนึ่ง
คำตอบ:
คุณเพียงแค่ต้องหลบหนีดอลล่า$ร์:
echo \$PATH
$PATH
หรือล้อมรอบด้วยเครื่องหมายคำพูดเดี่ยว:
echo '$PATH'
$PATH
สิ่งนี้จะทำให้แน่ใจได้ว่าคำศัพท์จะไม่ถูกตีความโดยเชลล์
echo -eหน้าคน
-eธงจะใช้ในการขยายเช่น\tการอักขระแท็บตัวอักษร ไม่เกี่ยวข้องกับการหลีกเลี่ยงเครื่องหมายดอลลาร์เพื่อป้องกันการขยายพารามิเตอร์
echo '\$PATH' >> output.txtผลลัพธ์ใน "/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / เกม: / opt / vc / bin" ถูกเขียนลงไฟล์ ไม่ใช่ "$ PATH"
echo '\044*' > first.txtมันจะออก $ * ใน first.txt
$ในรูปแบบของเชลล์ส่วนใหญ่เป็นตัวละครที่พิเศษมาก ถ้าเราดูที่เชลล์ที่มีลักษณะคล้ายบอร์นมันจะถูกใช้เพื่อแนะนำ:
$#, $var,${foo:-bar}$(logname)( ${ logname;}ในเชลล์บางตัวเพื่อหลีกเลี่ยงเชลล์ย่อย)$((1+1))( $[1+1]ในบางเชลล์)$'\n'$"localized string"ยกเว้นกรณีที่ผ่านมาขยายผู้ / แทนยังคงเกิดขึ้นอยู่ในเครื่องหมาย (และภายใน$"..."ในbashหรือksh93)
หากต้องการหยุดสิ่งนั้น$จากการได้รับการปฏิบัติเป็นพิเศษคุณต้องอ้างด้วย:
echo '$PATH' echo '$'PATHโดยทั่วไปแล้วสิ่งที่คุณต้องการใช้ในขณะที่มันจะหนีออกจากตัวละครทุกตัว (ยกเว้นตัวมันเอง) ในเชลล์ส่วนใหญ่echo \$PATHblackslash: นอกจากนี้ภายในเครื่องหมายคำพูดคู่:echo "\$PATH"echo $'$PATH', echo $'\44PATH'(สมมติว่าชุดอักขระที่เข้ากันได้กับ ASCII)echo $'\u0024'หรือตรวจสอบให้แน่ใจว่าไม่ได้เป็นส่วนหนึ่งของรูปแบบการขยายที่ถูกต้องตามที่ระบุข้างต้น:
echo "$"PATHecho $""PATH,echo $"PATH"ksh93และbashสนับสนุน$"..."รูปแบบของคำพูดecho $``PATH. ไม่มีเหตุผลที่คุณต้องการใช้อันนั้นยกเว้นเพื่อแสดงว่าเป็นไปได้echo "${$+$}PATH" และสิ่งที่ซับซ้อนอื่น ๆ ...หรือคุณสามารถเอาท์พุทแบบ$อื่นได้:
echo: echo '\044PATH'(บางechoความต้องการอื่น ๆecho -e '\044PATH')printf '\44PATH\n'แมว << \ EOF $ PATH EOF
ให้สังเกตว่าแบ็กสแลชเหล่านั้นจำเป็นต้องอ้างถึงอย่างไรเนื่องจากเป็นพิเศษสำหรับเชลล์อย่างชัดเจน
หวังว่าจะมีความชัดเจนในตอนนี้แม้ว่าจะมีหลายวิธีที่จะทำ แต่ก็ไม่มีเหตุผลที่ดีที่คุณต้องการใช้สิ่งอื่นนอกจากecho '$PATH'ที่นี่
โปรดทราบว่าตัวอักษร $ ในเครื่องหมายคำพูดคู่อาจเป็นปัญหาได้ สามารถทำได้โดยการผลิต $ นอกเครื่องหมายคำพูดคู่เช่นนี้
echo "My terminal is $term, first file found in /dev is </dev/`ls /dev | head -n 1`>, the
dollar symbol is '"`echo '$'`"', and a newspaper costs "`echo '$'`"2.50."
or like this:
echo "$term is the value of "'$term'
เอาท์พุท:
My terminal is xterm, first file found in /dev is </dev/acpi>, the dollar symbol
is '$', and a newspaper costs $2.50.
xterm is the value of $term
echo "$term is the value of \$term"ตามที่อธิบายไว้แล้วในคำตอบอื่น หรือprintf '%s is the value of $term\n' "$term"อย่างใดอย่างหนึ่งไม่ควรใช้echoสำหรับข้อมูลโดยพลการ
ใช้:
echo ''\$PATH'' >> output.txt
สิ่งนี้จะได้ผล
ec""h'''o''' ''""''\$P''A""TH''
echo '$PATH'ใช่ใช้คำพูดเดียวที่ชอบ: สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการอ้างอิงโปรดไปที่นี่และสิ่งนี้