奇怪的是,[[ 111-11-1111 =~ "[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]" ]]
只是在命令行上取得成功。
但是当我bash re.sh 111-11-1111
#!/bin/bash
# re.sh
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
为什么?
答案 0 :(得分:1)
正如其他人所提到的,如果您使用bash 3.2
或更高版本,则应删除正则表达式上的引号。不过,这里的表达方式较短:
if [[ $input =~ ^[0-9]{3}-[0-9]{2}-[0-9]{4}$ ]]