1
我有一个变量为list_of_files
的文件列表。所以,如果我运行下面的命令Bash在for循环中抱怨“没有这样的文件或目录”
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
尝试以下方法,但也失败了。
- 使用完整的绝对路径
- 从所有文件路径
野性预感 - 确保'$ list_of_files'没有任何多余/不合适的行结束符('\ r \ n' vs'\ n')。 – keithmo
1:在脚本中添加一个“pwd”,以验证您是否在您认为自己的目录中。 2:在脚本中添加一个'set -x',打印每个正在执行的命令 - 它看起来是否合理? –
在脚本中有'cat。/ a.py'工作吗? –