假设$file
拥有文件名的值,请说Dr' A.tif
。在bash编程中,如何在$file
不删除特殊字符的情况下转义单引号和其他任何特殊字符?
2014年7月9日更新
根据@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
知道如何处理吗?
3
您希望在什么情况下使用$ file?还是将带有特殊字符的字符串分配给$ file的问题?
—
2014年
实际上,find命令返回一个文件列表数组。然后,我遍历此文件列表进入$ file变量。
—
huahsin68 2014年
您在此处已获得一些正确答案,但它们可能不是您真正提出的问题的答案。根据您在这里的评论,我强烈怀疑您走错了路。我们无法为您提供太多帮助,因为您一直没有显示代码。但是,我建议您阅读为什么我的shell脚本在空白或其他特殊字符上会阻塞?作为背景。显示您的脚本并解释您想做什么。
—
吉尔(Gilles)'所以