我在变量list_of_files
中有一个文件列表。所以如果我运行以下命令
for file_path in $list_of_files; do
echo "=${file_path}="
done
它给了我这个
=./a.py=
=./b.py=
=./c.py=
表示file_path
包含文件的相对路径,在之前或之后没有任何冗余空格。
但如果我使用cat
代替echo
,则会抱怨"没有这样的文件或目录"
for file_path in $list_of_files; do
cat ${file_path}
done
但有趣的是,如果我直接致电cat
cat ./a.py
,那就有效。
这不是猫特有的问题。事实证明,如果我使用if
语句检查文件是否存在,它会告诉我这些文件不存在。
for file_path in $list_of_files; do
if [ -f "$file_path" ]
then
echo 'OK'
else
echo 'NO'
fi
done
结果:
NO
NO
NO
尝试了以下方法,但也失败了。
./
答案 0 :(得分:2)
原因是$list_of_files
已着色。因此它包含一些用于着色目的的特殊字符,但隐藏了!
我发现使用echo "$list_of_files" | od -An -tcx1
(感谢@BinaryZebra),它会显示所有着色文件名的容器。
通过使用sed -r "s:\x1B\[[0-9;]*[mK]::g"
,我排除了那些神奇的位!