Giả sử $filegiữ một giá trị của một tên tập tin, nói Dr' A.tif. Trong lập trình bash, làm thế nào tôi có thể thoát khỏi trích dẫn đơn và bất kỳ ký tự đặc biệt nào khác $filemà không xóa ký tự đặc biệt?
Cập nhật ngày 9 tháng 7 năm 2014
Theo yêu cầu từ @Gilles , đoạn mã sau không thể xử lý 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}
Sau khi tôi đã cố gắng ra câu trả lời từ @Patrick trên line 1, có vẻ như để làm việc cho tôi. Nhưng nếu tôi có tập tin như Dr\^s A.tif, printflệnh không có vẻ hữu ích, nó sẽ hiển thị cho tôi Dr\^s\ A.tif. Nếu tôi tự thử nó trên bàn điều khiển như thế này:
printf "%q" "Dr\^s A.tif"
Tôi sẽ có đầu ra này:
Dr\\\^s\ A.tif
Bất kỳ ý tưởng làm thế nào để xử lý này?