我正在尝试编写一个bash脚本,并将一些全局模式作为参数传递给一个复杂函数。但是,该函数无法识别全局模式,并且我收到了一个提示,
EXITING because of fatal input ERROR: could not open readFilesIn=ABC001_2_good_????.txt
我正在使用的函数,
cat acc.txt | xargs -I{} ...--readFilesIn $Dir/{}_1_good_????.txt .....
acc.txt包含登录列表,例如ABC001、ABC002、ABC003。
先谢谢你。
1条答案
按热度按时间mw3dktmi1#
问题是shell扩展了通配符(或尝试),然后将它们作为参数传递给
xargs
。这意味着它正在查找名称以“{}1_good"开头的文件,因此失败。由于没有匹配,因此传递(未展开)转换为xargs
,它将“{}”替换为实际的前缀,但此时要将????
部分视为通配符已经太晚了。在我看来,最简单的解决方案是使用shell循环而不是
xargs
:在这种形式中,shell将替换
$Dir
和${prefix}
,然后 * 再 * 扩展通配符,所以它应该可以工作,但是要注意,如果它找到多个匹配项,它将继续包含所有匹配的文件,这可能会混淆STAR
工具。顺便说一句,如果你使用
$prefix_1_good_
,它会把_1_good_
当作变量名的一部分,所以你必须使用${prefix}
而不仅仅是$prefix
。我还在变量扩展周围添加了双引号,因为这是很好的通用脚本卫生。