ฉันเห็นไวยากรณ์ต่อไปนี้ในสคริปต์ทุบตี:
>$(command) &
ฉันรู้ว่าเครื่องหมายแอมเปอร์แซนด์&
ในตอนท้ายทำให้คำสั่งรันในพื้นหลัง แต่ฉันไม่เคยเห็นมันมารวมกับเครื่องหมายดอลลาร์บวกเครื่องหมายวงเล็บรอบคำสั่ง
มันทำอะไร?
ฉันเห็นไวยากรณ์ต่อไปนี้ในสคริปต์ทุบตี:
>$(command) &
ฉันรู้ว่าเครื่องหมายแอมเปอร์แซนด์&
ในตอนท้ายทำให้คำสั่งรันในพื้นหลัง แต่ฉันไม่เคยเห็นมันมารวมกับเครื่องหมายดอลลาร์บวกเครื่องหมายวงเล็บรอบคำสั่ง
มันทำอะไร?
คำตอบ:
ได้รับไวยากรณ์$(command) &
ผลเป็นเช่นเดียวกับถ้าคุณเอาผลลัพธ์ของการทำงานเพียงcommand
และพยายามแล้วที่จะเรียกว่าเป็นคำสั่ง และทั้งหมดนี้จะทำในพื้นหลังซึ่งหมายความว่าจะไม่มีเอาท์พุทที่มองเห็นได้หรือแขวนอยู่ในอาคาร
ตัวอย่างเช่นหากเรามีไฟล์ข้อความชื่อmycommand.txt
เนื้อหา:
echo "Hello World"
จากนั้นคำสั่ง
$(cat mycommand.txt) &
จะเท่ากับการทำงาน
echo "Hello World" &
แต่เนื่องจากเราเพิ่มเครื่องหมายและ ( &
) เราจะไม่เห็นผลลัพธ์ใด ๆ จากคำสั่งนี้ดังนั้นมันจึงไร้ประโยชน์ในตัวอย่างนี้
$
(ตัวแปร)เครื่องหมายดอลลาร์ก่อนสิ่งที่อยู่ในวงเล็บมักจะหมายถึงตัวแปร นี่หมายความว่าคำสั่งนี้กำลังส่งผ่านอาร์กิวเมนต์ไปยังตัวแปรนั้นจากสคริปต์ bash หรือรับค่าของตัวแปรนั้นสำหรับบางสิ่ง ความแตกต่างในการทุบตีสคริปต์สำหรับการเรียกใช้และการประกาศตัวแปรมีดังนี้:
ประกาศตัวแปรที่ไม่มีเครื่องหมายดอลลาร์และเรียกมันด้วยเครื่องหมายดอลลาร์ ตัวอย่างเช่นสคริปต์ที่มีสิ่งนี้
#!/bin/bash
STR="Hello World!"
echo $STR
จะเอาท์พุทนี้
Hello World!
()
- การทดแทนคำสั่งการทดแทนคำสั่งอนุญาตให้เอาต์พุตของคำสั่งเพื่อแทนที่คำสั่งเอง การทดแทนคำสั่งเกิดขึ้นเมื่อคำสั่งถูกล้อมรอบดังนี้:
$(command)
หรือ
`command`
Bash ทำการขยายตัวโดยดำเนินการคำสั่งในสภาพแวดล้อม subshell และแทนที่การทดแทนคำสั่งด้วยผลลัพธ์มาตรฐานของคำสั่งด้วยบรรทัดใหม่ต่อท้ายใด ๆ ที่ถูกลบ บรรทัดใหม่ที่ฝังจะไม่ถูกลบ แต่อาจถูกลบระหว่างการแยกคำ ทดแทนคำสั่ง$(cat file)
จะถูกแทนที่ด้วยเทียบเท่า $(< file)
แต่ได้เร็วขึ้น
&
- กระบวนการพื้นหลังและจากนั้นเครื่องหมายหรือ&
สัญลักษณ์ก็คืออย่างที่คุณพูดใช้สำหรับเรียกใช้ในพื้นหลัง
มันจะเอาท์พุทของ "คำสั่ง" เป็นคำสั่งและทำงานในพื้นหลัง มันมีฟังก์ชั่นเปรียบได้กับ "eval"
$( )
นั้น แต่ไม่มีที่เหลือ มันเป็นเพียง$(command) &
สิ่งที่ทำให้ฉันสับสน