bash命令替换失败(字符

时间:2015-04-08 07:37:39

标签: bash glob

我正在运行一个bash脚本,如下所示:

n=`ls /tmp/abc/*-(2|3).20150406.txt | wc -l`;

但它在此行说出语法错误 命令替换:第1行意外令牌`('

相同的命令在没有控制台上的脚本的情况下运行正常。我在这里遗漏了什么。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

假设您要匹配此文件名模式:

<anything><dash><2 or 3><anything><20150406.txt>

例如,匹配:

file-2.20150406.txt
file-3.20150406.txt
run-29.20150406.txt

但不是:

file-4.20150406.txt
run-29.20150406

以下应该可以解决问题:

#!/bin/bash

n=`find /tmp/abc -regex ".*-[23].*20150406.txt" | wc -l`
echo $n

一般来说,findls更适合regexen。

答案 1 :(得分:1)

您需要在此处使用extglob来匹配几个选定的数字,如下所示:

shopt -s extglob
printf "%s\n" /tmp/abc/*-@(2|3|29).20150406.txt

它将打印:

/tmp/abc/run-2.20150406.txt
/tmp/abc/run-29.20150406.txt
/tmp/abc/run-3.20150406.txt

计算它们:

printf "%s\n" /tmp/abc/*-@(2|3|29).20150406.txt | wc -l