bash:case语句显示1和11之间没有区别?

bash:case语句显示1和11之间没有区别?,bash,switch-statement,Bash,Switch Statement,我正试图转换一个特定的数字,它来自一个以分号分隔的文本文件中的记录 group=$( echo $line | cut -d';' -f6 ) 此列(6)的可能值在1-20范围内。 例如,如果找到数字“11”,我必须将其转换为“5a” 但是,每次执行脚本时,10-19之间的所有值都默认为[1]开关。 我试着引用像['11]或['11']这样的开关,但没有成功。 如何正确切换10-19值?[11]与[1]相同,因为它是从1到1的字符类/范围 如果您的值是数字,则不需要通配符:只需执行以下情况:

我正试图转换一个特定的数字,它来自一个以分号分隔的文本文件中的记录

 group=$( echo $line | cut -d';' -f6 )
此列(6)的可能值在1-20范围内。 例如,如果找到数字“11”,我必须将其转换为“5a”

但是,每次执行脚本时,10-19之间的所有值都默认为[1]开关。 我试着引用像['11]或['11']这样的开关,但没有成功。
如何正确切换10-19值?

[11]
[1]
相同,因为它是从1到1的字符类/范围

如果您的值是数字,则不需要通配符:只需执行以下情况:

     1)
            group='1a';
            echo $group >> "$file"
     esac
     ;;
     11)
            group='5a';
            echo $group >> "$file"
      esac
       ;;
     1[a-z])
            group='1a';
            echo $group >> "$file"
     esac
     ;;
     11[a-z])
            group='5a';
            echo $group >> "$file"
      esac
       ;;
(依此类推:默认情况为
*)
BTW)

如果数字后面跟着字母,您可以这样做:

     1)
            group='1a';
            echo $group >> "$file"
     esac
     ;;
     11)
            group='5a';
            echo $group >> "$file"
      esac
       ;;
     1[a-z])
            group='1a';
            echo $group >> "$file"
     esac
     ;;
     11[a-z])
            group='5a';
            echo $group >> "$file"
      esac
       ;;
注意:如果您想匹配
11
1
后面的任何内容,可以执行以下操作:

     11*)
            group='5a';
            echo $group >> "$file"
      esac
       ;;

     1*)
            group='1a';
            echo $group >> "$file"
     esac
     ;;
(第二种情况将匹配所有从1开始但不是从11开始的数字。请注意,我已经颠倒了这些情况,最精确的匹配在前)


选择:)

[11]
[1]
相同,因为它是一个从1到1的字符类/范围

如果您的值是数字,则不需要通配符:只需执行以下情况:

     1)
            group='1a';
            echo $group >> "$file"
     esac
     ;;
     11)
            group='5a';
            echo $group >> "$file"
      esac
       ;;
     1[a-z])
            group='1a';
            echo $group >> "$file"
     esac
     ;;
     11[a-z])
            group='5a';
            echo $group >> "$file"
      esac
       ;;
(依此类推:默认情况为
*)
BTW)

如果数字后面跟着字母,您可以这样做:

     1)
            group='1a';
            echo $group >> "$file"
     esac
     ;;
     11)
            group='5a';
            echo $group >> "$file"
      esac
       ;;
     1[a-z])
            group='1a';
            echo $group >> "$file"
     esac
     ;;
     11[a-z])
            group='5a';
            echo $group >> "$file"
      esac
       ;;
注意:如果您想匹配
11
1
后面的任何内容,可以执行以下操作:

     11*)
            group='5a';
            echo $group >> "$file"
      esac
       ;;

     1*)
            group='1a';
            echo $group >> "$file"
     esac
     ;;
(第二种情况将匹配所有从1开始但不是从11开始的数字。请注意,我已经颠倒了这些情况,最精确的匹配在前)


做出你的选择:)

Fabre:按照你的建议,改变开关的说法,对我来说非常有效!因为我不知道你的代币的形式,我只是发布了一个详尽的解决方案。法布:按照你的建议,颠倒开关语句,对我来说非常有效!因为我不知道您的令牌的形式,所以我发布了一个详尽的解决方案。您的代码在语法上不正确吗?你为什么有两个“以撒”?第一个不应该在那里。你的代码语法不正确吗?你为什么有两个“以撒”?第一个不应该在那里。