pathToBins=$1
bins="${pathToBins}contigs.fa.metabat-bins-*"
for fileName in $bins
do
echo $fileName
done
我的目标是将路径附加到我的文件名。当我没有附加路径时,我可以遍历文件夹并获取文件名。我的挑战是,当我添加路径echo fileName时,我的正则表达式不再有效,我得到了" /home/erikrasmussen/Desktop/Script/realLargeMetaBatBinscontigs.fa.metabat-bins - *"正则表达式' *'被视为一个字符串。如何在迭代文件夹时获取路径和完整文件名?
答案 0 :(得分:1)
虽然我真的不知道你的文件是如何安排在你的硬盘上的,但偶然看一眼"/home/erikrasmussen/Desktop/Script/realLargeMetaBatBinscontigs.fa.metabat-bins-*"
表明它在{{1}之前缺少 / }。如果是这种情况,那么您应该将bin的定义更改为:
contigs
但是,使用bash数组而不是依赖文件名来包含空格和元字符要强得多。所以我建议:
bins="${pathToBins}/contigs.fa.metabat-bins-*"
Bash通常不会展开与任何文件都不匹配的模式,因此在这种情况下您将看到原始模式。如果你使用上面的数组公式,你可以设置bash选项bins=(${pathToBins}/contigs.fa.metabat-bins-*)
for fileName in "${bins[@]}"
do
echo "$fileName"
done
,这将导致不匹配的模式消失,留下一个空数组。