Bash 为什么要用!然后逃离符号吗?

Bash 为什么要用!然后逃离符号吗?,bash,shell,unix,Bash,Shell,Unix,这句话: #!/bin/sh echo "Enter a name" read name case "$name" in *[!\ a-zA-Z]*) echo "Can contain only alphabets" >/dev/tty continue;; *) echo "Good entry" ;; esac 有在开始处,它对[…]中存在的所有字符或范围进行求反。在这种情况下,它意味着任何

这句话:

#!/bin/sh
echo "Enter a name"
read name
    case "$name" in
            *[!\ a-zA-Z]*)  echo "Can contain only alphabets" >/dev/tty
            continue;;
            *) echo "Good entry" ;;
    esac
在开始处,它对
[…]
中存在的所有字符或范围进行求反。在这种情况下,它意味着任何

  • 没有空间
  • 不在
    a-z范围内
  • 不在
    A-Z范围内
还要注意转义是针对
\
旁边的空格,而不是前面的
以避免分词。

测试您的表达,找出当您删除困扰您的部分时会发生什么。很高兴知道它成功了,
*[!\ a-zA-Z]*