如何通过Bash扩展生成指定有效相似文件名以进行diff?
生成指定Bash文件名称组合的方法
你需要的是只生成foo-averylongstring-bar和baz-averylongstring-quux这两个有效组合,避免笛卡尔积式大括号扩展产生无效项,这里有几种实用方法:
直接指定完整组合:最直观的方式,把两个目标完整放在大括号里,扩展后只会生成这两个字符串:
{foo-averylongstring-bar,baz-averylongstring-quux}这个表达式会直接展开成你要的结果,没有多余组合。
用变量简化重复长串:如果中间的
averylongstring特别长,不想重复书写,可以先把它定义成变量,再拼接前缀和后缀:mid=averylongstring echo "foo-$mid-bar baz-$mid-quux"这种写法可读性强,能直接得到目标字符串,还避免了重复输入长串。
数组配对生成:如果后续需要扩展更多按顺序配对的前缀和后缀,可以用数组关联对应关系:
prefixes=(foo baz) suffixes=(bar quux) result="" for i in ${!prefixes[@]}; do result+="${prefixes[$i]}-averylongstring-${suffixes[$i]} " done echo "$result"这种方法适合批量按序配对的场景,扩展性更好。
要注意的是,Bash标准大括号扩展(比如{foo,baz}-xxx-{bar,quux})本质是笛卡尔积扩展,会生成所有前缀和后缀的组合,没办法直接通过这种语法只得到你要的两个配对项,必须用上述方式手动指定或配对。
内容的提问来源于stack exchange,提问作者Bence Csókás
相关产品推荐
相关产品推荐

