用于测试文件存在性的Bash脚本

用于测试文件存在性的Bash脚本,bash,Bash,我试图检查(用户jane的)txt文件中写入的文件路径是否存在于系统中。这是文件list.txt: 001 jane /data/jane_profile_07272018.doc 002 kwood /data/kwood_profile_04022017.doc 003 pchow /data/pchow_profile_05152019.doc 004 janez /data/janez_profile_11042019.doc 005 jane /data/jane_pic_072820

我试图检查(用户jane的)txt文件中写入的文件路径是否存在于系统中。这是文件list.txt:

001 jane /data/jane_profile_07272018.doc
002 kwood /data/kwood_profile_04022017.doc
003 pchow /data/pchow_profile_05152019.doc
004 janez /data/janez_profile_11042019.doc
005 jane /data/jane_pic_07282018.jpg
006 kwood /data/kwood_pic_04032017.jpg
007 pchow /data/pchow_pic_05162019.jpg
008 jane /data/jane_contact_07292018.csv
009 kwood /data/kwood_contact_04042017.csv
010 pchow /data/pchow_contact_05172019.csv
这是我写的剧本:

#!/bin/bash
file=$(grep ' jane ' ../data/list.txt | cut -d ' ' -f 3)
for i in $file
do
  i="~${i}"
  if (test -e $i); then echo "File exists"; else echo "File doesn't exist"; fi
done
我不明白为什么命令

test -e ~/data/jane_profile_07272018.doc

是真的,但是当我像上面的脚本那样编写它时,它返回false。这与我添加~的方式有关吗?如果没有它,命令本身将返回false。

~/data/jane\u profile\u 07272018.doc
前面的
~
大致相当于
$HOME/data/jane\u profile\u 07272018.doc
。因此,它不是在根目录下查找文件,而是在主目录下查找文件

你应该做:

if[-e“$file”];然后
回显“$file:存在”
其他的
echo“文件:不存在”
fi

我认为
~
只能在bash命令行中工作。改为试试$HOME?
~
将在脚本中工作,但如果它在引号中(如此处所示),则不会工作。因此,请尝试
i=“${HOME}${i}”
代替;do p=“$HOME/$f”;如果[-e“$p”];然后存在printf“%s”\n“$p”;fi;完成<