SHELL:在定义字符串时如何使用or运算符

时间:2011-02-18 02:13:33

标签: linux shell glob

这可能甚至不可能,但我正在编写我的第一个shell脚本,我需要在我的字符串中使用regexp类型的运算符(如下所示)

FILES=tif2/name(45|79)*.pdf

这可能吗?或者我只需要两个字符串。

FILES=tif2/name45*.pdf
FILES=tif2/name79*.pdf

4 个答案:

答案 0 :(得分:1)

shell globbing语法中的替代项使用以分号括起的逗号分隔列表。你的例子变成了:

FILES=tif2/name{45,79}*.pdf

大多数shell都支持glob语法a pretty nice quick reference here

有关更深奥的特定于bash的glob语法,请参阅http://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions

答案 1 :(得分:1)

在Bash,zsh,pdksh和ksh93中,您可以使用扩展的globbing:

shopt -s extglob   # Bash
setopt KSH_GLOB    # zsh
FILES=tif2/name@(45|79)*.pdf

@()运算符匹配其中一个模式,这些模式由管道符号分隔。

答案 2 :(得分:0)

如果您的特定shell不支持此类高级通配,您可以始终使用grep

FILES=`ls tif2/name[0-9][0-9]*.pdf|egrep "name(45|79)" | tr "\012" " "`

答案 3 :(得分:-1)

如果你只想让shell忽略字符串中的任何特殊字符,请用单引号将其括起来。

FILES='tif2/name(45|79)*.pdf'