我有一个函数,它应该遍历数组中的每个客户,并对该目录执行grep。
test(){
set -x;
export customers=( customer1 customer2 customer3 );
export repo_path="~/repodir";
export output_path='/tmp';
for i in "${customers[@]}"
do
echo "${repo_path}/PEC/repo-${i}/build.yml"
grep 'link: ' $repo_path/PEC/repo-$i/build.yml | cut -d '/' -f 2 | sed 's/.git//g'
done | sort -u > ${output_path}/repos.txt
echo "${output_path}/repos.txt";
}
出于某种原因,我收到以下错误消息:
grep:~/reportdir/PC/customer1/build.yml:没有这样的文件或目录
但当我检查完全相同的路径时,我可以看到并读取文件。。。第一个echo命令似乎也没有执行。当我用grep 'link: ' ~/repodir/PEC/repo-$i/build.yml
替换grep 'link: ' $repo_path/PEC/repo-$i/build.yml
时,它确实有效。
我尝试了各种方法来定义变量,比如${repo_path}
,添加不同类型的引号。。。所以我基本上不知道我能做些什么来让它发挥作用。
$HOME
是一个环境变量,设置为包含当前用户的主文件夹。终端会话应始终可以访问此环境变量,除非已将其删除。~
是shell扩展符号,是在执行实际命令之前处理的符号之一。~单独扩展到$HOME的价值。
您的代码,export repo_path="~/repodir";
如果要使用~
,请尝试转义该字符,则~
在字符串中,可能不会被处理。为了便于阅读,使用$HOME
变量会更简单。