Giả sử $file
giữ 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 $file
mà 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
, printf
lệ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?