Предполагая, что $fileон содержит значение имени файла, скажем Dr' A.tif. В программировании на Bash, как я могу избежать одиночной кавычки и любого другого специального символа $fileбез удаления специального символа?
Обновление от 9 июля 2014 г.
По запросу @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
Есть идеи, как с этим справиться?