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'工作嗎? –