ฉันกำลังเรียนรู้ Bash และฉันต้องการแทนที่อักขระช่องว่างด้วยอักขระ "ไม่ว่าง" อื่น ๆ ฉันกำลังใช้for
ลูป:
for f in *\ *; do mv "$f" "${f// /_}"; done
คำถามของฉันคือทำไมทับสองและช่องว่างใน${f// /_}
? อะไร${f// /_}
ทำอย่างไร
ฉันกำลังเรียนรู้ Bash และฉันต้องการแทนที่อักขระช่องว่างด้วยอักขระ "ไม่ว่าง" อื่น ๆ ฉันกำลังใช้for
ลูป:
for f in *\ *; do mv "$f" "${f// /_}"; done
คำถามของฉันคือทำไมทับสองและช่องว่างใน${f// /_}
? อะไร${f// /_}
ทำอย่างไร
คำตอบ:
เป็นรูปแบบการแทนที่โดยใช้bash
การขยายพารามิเตอร์
ใน${f// /_}
:
เครื่องหมายทับสองครั้ง//
ใช้สำหรับแทนที่พื้นที่ทั้งหมดด้วย_
ถ้าคุณใส่เครื่องหมายทับหนึ่ง/
ช่องจะมีเพียงช่องว่างแรกเท่านั้นที่จะถูกแทนที่
มีที่ว่างเพราะคุณกำลังแทนที่พื้นที่ (ด้วยเครื่องหมายขีดล่าง)
ดังนั้นรูปแบบโดยทั่วไปคือ:
${parameter//find/replace}
ตรวจสอบman bash
เพื่อรับแนวคิดเพิ่มเติม
วิธีไปที่Parameter Expansion
หัวข้อman bash
ในครั้งเดียว:
LESS=+/'Parameter Expansion' man bash
ส่วน"{f// /_}
หมายถึงแทนที่ทุกช่องว่างด้วยและขีดเส้นใต้ นี่คือการใช้การขยายพารามิเตอร์ Bash ตัวแปรที่f
กำหนดไว้ในfor f in *\ *;
จะถูกเรียกใช้ผ่านสำหรับทุกการจับคู่ของการขยายเชลล์ (กลม) $f
แต่ละครั้งที่ชื่อไฟล์ที่พบจะกลายเป็นค่า
การขยายพารามิเตอร์ใช้งานได้กับ//
ความหมายทุกครั้งของอักขระต่อไปนี้//
(เว้นวรรคในตัวอย่างนี้) ควรแทนที่ด้วยอักขระหลัง/
(ขีดล่างในตัวอย่างนี้)