使用bash脚本在OS X上运行:
sourceFile=`basename $1`
shopt -s nocasematch
if [[ "$sourceFile" =~ "adUsers.txt" ]]; then echo success ; else echo fail ; fi
上述方法有效,但如果用户提供名为adUsers_new.txt
的文件<?p>,该怎么办?
我试过了:
if [[ "$sourceFile" =~ "adUsers*.txt" ]]; then echo success ; else echo fail ; fi
但是在这种情况下,通配符不起作用。
我正在编写此脚本以允许用户对源文件名进行不同的迭代,该文件名必须以aduser
开头并具有.txt
文件扩展名。
答案 0 :(得分:6)
在bash
中,您可以使用以下命令获取shell变量的前7个字符:
${sourceFile:0:7}
和最后四个:
${sourceFile:${#sourceFile}-4}
有了这些知识,只需使用那些通常会使用变量本身的表达式,如下面的脚本:
arg=$1
shopt -s nocasematch
i7f4="${arg:0:7}${arg:${#arg}-4}"
if [[ "${i7f4}" = "adusers.txt" ]] ; then
echo Okay
else
echo Bad
fi
您可以使用以下成绩单查看它:
pax> check.sh hello
Bad
pax> check.sh addUsers.txt
Bad
pax> check.sh adUsers.txt
Okay
pax> check.sh adUsers_new.txt
Okay
pax> check.sh aDuSeRs_stragngeCase.pdf.gx..txt
Okay
答案 1 :(得分:2)
=~
运算符需要regexp,而不是通配符。 ==
接受通配符,但不应引用它们:
if [[ "$sourceFile" == adUsers*.txt ]]; then echo success; else echo fail; fi
你当然也可以使用正则表达式,但这有点矫枉过正:
if [[ "$sourceFile" =~ ^adUsers.*\.txt$ ]]; then echo success; else echo fail; fi
请注意,默认情况下,正则表达式是a
== .*a.*
),而glob已关闭(a
!= *a*
)。