สมมติว่า$fileเก็บค่าชื่อไฟล์Dr' A.tifไว้ ในการเขียนโปรแกรม bash ฉันจะหนีจากเครื่องหมายคำพูดเดี่ยวและอักขระพิเศษอื่น ๆ$fileโดยไม่ลบอักขระพิเศษได้อย่างไร
อัพเดทเมื่อวันที่ 9 กรกฎาคม 2557
ตามคำขอจาก @Gillesโค้ดต่อไปนี้ที่ไม่สามารถจัดการได้Dr' A.tif:
files=$(find /path/ -maxdepth 1 -name "*.[Pp][Dd][Ff]" -o -name "*.[Tt][Ii][Ff]")
echo "${files}" > ${TEMP_FILE}
while read file
do
newfile=$(echo "${file}" | sed 's, ,\\ ,g') ## line 1
done < ${TEMP_FILE}
หลังจากที่ฉันได้ลองคำตอบจาก @Patrickบนline 1ดูเหมือนว่าจะทำงานให้ฉัน แต่ถ้าผมมีไฟล์เช่นDr\^s A.tif, คำสั่งไม่ได้ดูเหมือนความช่วยเหลือมันแสดงให้เห็นฉันprintf Dr\^s\ A.tifหากฉันลองบนคอนโซลด้วยตนเองเช่นนี้:
printf "%q" "Dr\^s A.tif"
ฉันจะได้ผลลัพธ์นี้:
Dr\\\^s\ A.tif
มีความคิดวิธีจัดการกับเรื่องนี้อย่างไร?