我有一个在变量
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
,它就可以工作。
这不是cat
命令特定的问题。事实证明,如果我使用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
与\n
)。 - keithmopwd
命令,以验证你所在的目录是否正确。 2: 在你的脚本中添加一个set -x
命令,以打印每个被执行的命令 -- 它们看起来合理吗? - Snild Dolkowcat ./a.py
命令? - Karoly Horvathod
(它在大多数Linux安装中都有)。使用man od
测试是否已经安装了手册,如果手册已经安装,则该命令也应该被安装。如果是这样的话,那么执行以下命令:echo "$list_of_files" | od -An -tcx1
并将结果发布在此处。这将显示变量可能包含的任何奇怪字符。 - user2350426