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