ฉันพิมพ์สิ่งนี้ใน Bash:
scp user@remote:~/dir/*.xml .
และใช้งานได้รับไฟล์ทั้งหมดที่สร้างไวด์การ์ดบนเซิร์ฟเวอร์ระยะไกล แต่ทำไมถึงใช้งานได้? scp
ผมคิดว่าทุบตีขยายนิพจน์ตัวแทนในการขัดแย้งก่อนที่จะกลายเป็นข้อโต้แย้งที่มองเห็นเครื่องมือเช่น
ฉันพิมพ์สิ่งนี้ใน Bash:
scp user@remote:~/dir/*.xml .
และใช้งานได้รับไฟล์ทั้งหมดที่สร้างไวด์การ์ดบนเซิร์ฟเวอร์ระยะไกล แต่ทำไมถึงใช้งานได้? scp
ผมคิดว่าทุบตีขยายนิพจน์ตัวแทนในการขัดแย้งก่อนที่จะกลายเป็นข้อโต้แย้งที่มองเห็นเครื่องมือเช่น
คำตอบ:
หากไม่มีชื่อไฟล์ที่ตรงกันแล้วนิพจน์ตัวแทนใน bash จะขยายออกไปเอง ดังนั้นตราบใดที่คุณไม่สร้างไฟล์ใด ๆ ในเครื่องซึ่งมีชื่อตรงกันuser@remote:~/dir/*.xml
คำสั่งของคุณจะทำงานโดยไม่ต้องพูด
nullglob
ไม่ทำให้รูปแบบขยายเป็นสตริงว่าง มันทำให้มันหายไปโดยสิ้นเชิง มันเป็นความแตกต่างระหว่างscp "" .
(สองข้อโต้แย้งหนึ่งในนั้นคือสตริงที่ว่างเปล่า) และscp .
(อาร์กิวเมนต์เดียวและการเรียกที่ไม่ถูกต้องscp
)
nullglob
ซึ่งมันจะขยายไปยังสตริงที่ว่างเปล่า