这可能甚至不可能,但我正在编写我的第一个shell脚本,我需要在我的字符串中使用regexp类型的运算符(如下所示)
FILES=tif2/name(45|79)*.pdf
这可能吗?或者我只需要两个字符串。
FILES=tif2/name45*.pdf
FILES=tif2/name79*.pdf
答案 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'