What does the “=~” operator do in shell scripts?
它似乎是一种比较运算符,但它在以下代码(摘自https://github.com/lvv/g it prompt/blob/master/git prompt.sh_l154)中究竟做了什么?
1 2 3 4 5 | if [[ $LC_CTYPE =~"UTF" && $TERM !="linux" ]]; then elipses_marker="…" else elipses_marker="..." fi |
我目前正试图让
1 2 3 | conditional binary operator expected syntax error near `=~' ` if [[ $LC_CTYPE =~"UTF" && $TERM !="linux" ]]; then' |
在这种特定的情况下,我可以用
它只是对内置的
在这种情况下,如果
更便携的版本:
1 2 3 4 5 6 | if test `echo $LC_CTYPE | grep -c UTF` -ne 0 -a"$TERM" !="linux" then ... else ... fi |
它是一个正则表达式匹配。我想你的bash版本还不支持这个。
在这种情况下,我建议用更简单(更快)的模式匹配替换它:
1 | [[ $LC_CTYPE == *UTF* && $TERM !="linux" ]] |
(注意,此处不能引用
和Ruby一样,它匹配rhs操作数是正则表达式的位置。
它与正则表达式匹配
请参阅http://tldp.org/ldp/abs/html/bashver3.html regexmatchref中的以下示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/bin/bash input=$1 if [["$input" =~"[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]" ]] # ^ NOTE: Quoting not necessary, as of version 3.2 of Bash. # NNN-NN-NNNN (where each N is a digit). then echo"Social Security number." # Process SSN. else echo"Not a Social Security number!" # Or, ask for corrected input. fi |