带有包含grep的变量的Bash循环



我有一个函数,它应该遍历数组中的每个客户,并对该目录执行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变量会更简单。

相关内容

  • 没有找到相关文章

最新更新