การใช้ backticks หรือดอลลาร์ในเชลล์สคริปต์


9

ฉันไม่ว่างที่จะเขียนเชลล์สคริปต์ (โดยใช้ Bash) ซึ่งฉันต้องเติมตัวแปรบางตัวจากผลลัพธ์ที่ส่งคืนของคำสั่งอื่น

ดังนั้นฉันจึงใช้ไวยากรณ์เช่นนี้

VAR=`command 2>/dev/null`

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

VAR=$(command 2>/dev/null)

ทั้งสองใช้งานได้สำหรับฉัน (ฉันได้รับผลลัพธ์ที่คาดหวังในทั้งสองกรณี) และฉันจึงสงสัยว่าถ้าฉันยังสามารถใช้ทั้งสองรูปแบบแทนกันได้หรือถ้าฉันต้องติดรูปแบบเดียวเพื่อให้แน่ใจว่าสอดคล้องกับวิวัฒนาการในอนาคตของ เปลือก ?



ลิงค์โดย belacqua มีข้อมูลมากมายเกี่ยวกับความแตกต่างและการใช้งาน การปิดตัวลงเนื่องจากไม่เกี่ยวข้องกับปัญหาของ Ubuntu แต่เป็นการเขียนโปรแกรมมากกว่าหนึ่งรายการ ฉันขอแนะนำตามลิงค์ที่กล่าวถึงข้างต้น
Luis Alvarado

คำตอบ:


13

ใช้เงินดอลลาร์ Backticks นั้นไม่ได้ถูกคัดค้านเนื่องจากมีความซับซ้อนกว่าในการใช้งาน (ดูลิงค์) และไม่มีข้อได้เปรียบสำหรับพวกเขาเว้นแต่ว่าคุณกำลังทำโค้ดกอล์ฟและต้องการบันทึกอักขระเพียงตัวเดียว พวกเขาอาจจะไม่ถูกลบออกจากเชลล์ยอดนิยมทุกเวลาในไม่ช้าดังนั้นคุณจึงปลอดภัยที่จะใช้งานในตอนนี้


3

ใช้สัญลักษณ์สัญญลักษณ์ดอลลาร์$()ทุกครั้งที่ทำได้ Backticks ได้รับยุ่งยาก / สับสนเมื่อคุณเริ่มต้องทำข้อความที่ซ้อนกัน Ex:

$ FOO=`echo "foo's"`
$ echo $FOO
foo's

แทนที่ backticks ด้วย$()ผลผลิตที่เท่ากันและง่ายต่อการอ่าน (เครื่องหมายคำพูดของมุมที่แตกต่างเป็นมุมมองที่น้อยลง):

$ FOO=$(echo "foo's")
$ echo $FOO
foo's

นั่นและเครื่องหมายอัญประกาศแต่ละรายการ (เครื่องหมายคำพูดเดี่ยว, เครื่องหมายคำพูดคู่, backtick) หมายถึงบางสิ่งที่แตกต่างกันในเชลล์ดังนั้นการใช้ $ สามารถช่วยขจัดระดับความซับซ้อน และผู้พัฒนาที่ติดตามคุณจะขอบคุณสำหรับเขา / เธอจะมีเวลาง่ายขึ้นในการหาสิ่งที่คุณทำ


Backticks ไม่สามารถใช้งานได้ซ้อนกัน
Bernhard

@Bernhard ตัวอย่างของฉันแสดงให้เห็นถึงสิ่งที่ฉันมีอยู่ในใจกับคำสั่งนั้น
Aaron
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.