$ (คำสั่ง) & ทำอะไร


10

ฉันเห็นไวยากรณ์ต่อไปนี้ในสคริปต์ทุบตี:

 >$(command) &

ฉันรู้ว่าเครื่องหมายแอมเปอร์แซนด์&ในตอนท้ายทำให้คำสั่งรันในพื้นหลัง แต่ฉันไม่เคยเห็นมันมารวมกับเครื่องหมายดอลลาร์บวกเครื่องหมายวงเล็บรอบคำสั่ง

มันทำอะไร?


ฉันรู้ว่าการใช้งานประเภท$( )นั้น แต่ไม่มีที่เหลือ มันเป็นเพียง$(command) &สิ่งที่ทำให้ฉันสับสน
AlphaOmega

คำตอบ:


20

คำตอบสั้น ๆ

ได้รับไวยากรณ์$(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)แต่ได้เร็วขึ้น

เครื่องหมาย&- กระบวนการพื้นหลัง

และจากนั้นเครื่องหมายหรือ&สัญลักษณ์ก็คืออย่างที่คุณพูดใช้สำหรับเรียกใช้ในพื้นหลัง


2

มันจะเอาท์พุทของ "คำสั่ง" เป็นคำสั่งและทำงานในพื้นหลัง มันมีฟังก์ชั่นเปรียบได้กับ "eval"


มันเป็นสัญลักษณ์ที่มีอยู่ในหน้าต่างเทอร์มินัลซึ่งขึ้นอยู่กับสิ่งที่คุณพยายามทำอาจไม่จำเป็นสำหรับคุณ เมื่อคุณเปิดเทอร์มินัลคุณจะเห็นมันทันที
monkeyman_stones

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