ตัวอย่างเช่น$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 \$PATH
blackslash: นอกจากนี้ภายในเครื่องหมายคำพูดคู่:echo "\$PATH"
echo $'$PATH'
, echo $'\44PATH'
(สมมติว่าชุดอักขระที่เข้ากันได้กับ ASCII)echo $'\u0024'
หรือตรวจสอบให้แน่ใจว่าไม่ได้เป็นส่วนหนึ่งของรูปแบบการขยายที่ถูกต้องตามที่ระบุข้างต้น:
echo "$"PATH
echo $""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'
ใช่ใช้คำพูดเดียวที่ชอบ: สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการอ้างอิงโปรดไปที่นี่และสิ่งนี้