混合牙套和球形是狂欢

  • 本文关键字:混合 bash glob braces
  • 更新时间 :
  • 英文 :


我想在我的一个bash脚本中替换以下循环:

for i in $(seq 1 $nb) do   
  grep -h 'my pattern' $mydir/$my_dir_prefix$i/$myfile_prefix* 
done

诸如:

之类的东西
grep -h 'my pattern' $mydir/$my_dir_prefix${1,$nb}/$myfile_prefix*

但失败了...取决于我尝试在何处放置双引号,我得到不同的结果,但从来没有正确的结果。

我看到的所有答案都没有解决这个问题。有什么想法吗?

只需将grep从循环中拉出:

grep -h 'my pattern' $(for i in $(seq 1 $nb); do find $mydir -wholename "$mydir/$my_dir_prefix$i/$myfile_prefix*"; done )

您会遇到怪异命名文件(例如包含新线或其他空格)的问题,但是您在原始解决方案中遇到了相同的问题。

edit:第一个解决方案仅适用于数字1-9,添加更好的一个

查看bash手册:

序列表达式以{x..y [.. engr]}的形式,其中x和y为 整数或单个字符。

...

在任何其他扩展之前进行撑杆扩展

因此,变量从字面上进行处理。

解决方案1.(仅适用于数字1-9)

,但是您应该能够为您的目的使用[] Glob:

grep -h 'my pattern' $mydir/$my_dir_prefix[1-$nb]/$myfile_prefix*

关于双引号,您可以到处添加它们,但可以在Glob周围添加:

grep -h 'my pattern' "$mydir/$my_dir_prefix"[1-$nb]"/$myfile_prefix"*

解决方案2。

您可以启用bash extglob选项并使用扩展模式匹配:

shopt -s extglob
grep -h grep -h 'my pattern' "$mydir/$my_dir_prefix"@($(seq -s | 1 $nb))"/$myfile_prefix"*

相关内容

  • 没有找到相关文章

最新更新