2012-04-04 80 views
1

我可以知道为什么在此shell脚本中使用“~”和“+$”。这是脚本删除比特定日期早的文件的一部分。美元和代字号的使用

if ! [[ $FILE_AGE =~ "^[0-9]+$" ]]; then 
    usage 
    exit 1 

我能够理解,脚本的这部分用于检查我们是否输入数字或字母。

+2

如果您使用bash版本4,您必须*不*引用右侧。如果引用它,bash会将其解释为文字字符串。它没有超清晰的记录,但[手册页说](http://www.gnu.org/software/bash/manual/bashref.html#index-g_t_005b_005b-57):“模式的任何部分可能被引用强制它被匹配为一个字符串“ – 2012-04-04 18:31:24

回答

6

=~运营商的意思是“如果左边的字符串右边的正则表达式匹配真,否则为假”。

^[0-9]+$装置寻找的序列的一个或多个(这就是+)在范围内的字符0至9(这是[0-9]),该启动串(^)和结束在字符串的结束的开始($ )。

这是基本的bash和正则表达式,请参阅the Bash manpage了解更多详情。

1

=〜是正则表达式匹配

$是正则表达式^[0-9]+$的一部分,它是指以匹配字符串的末尾

谷歌“正则表达式”的一个教程或指导

1

=~是正则表达式匹配运算符,而+属于[0-9]+的模式,而不是$。 该条件测试变量FILE_AGE的值是否与^(行首/字符串的开头)和$(行尾的字符串)之间的模式[0-9]+(一位或多位)匹配。