如果行的第9个字符" $ q"如何执行某些步骤是A,B,C,D还是E.有点像?
if [ ${q:9} == [A,B,C,D,E]; then
(如果第9个字符是大写字母A,B,C,D或E,那么;)
我已使用if [ ${q:9} == A ];
来匹配一个字母,并尝试构建类似上面的内容或:if [[ "${p:9}" == "A" && "$p" == "B" && "$p" == "C" "$p" == "D" "$p" == "E"]]; then
以匹配多个字母,但无论运算符如何都似乎无效我用。
答案 0 :(得分:2)
使用case
声明:
case ${q:9} in
[A-E])
echo found
;;
esac
答案 1 :(得分:2)
只需检查第9个字符with a regex的值:
[[ "${var:8:1}" =~ (A|B|C|D|E) ]]
例如:
$ v=12345678Axx
$ [[ "${v:8:1}" =~ (A|B|C|D) ]] && echo "yes" || echo "no"
yes
$ v=1234567890
$ [[ "${v:8:1}" =~ (A|B|C|D) ]] && echo "yes" || echo "no"
no
要获得第9个字符,我使用Bash Reference Manual → 3.5.3 Shell Parameter Expansion,因此第9个字符为${var:8:1}
,因为索引是从0开始的(第一个是0 th ) :
${parameter:offset:length}
这称为子字符串扩展。它扩展到长度 从字符开始的参数值的字符 由offset指定。如果参数为'@',则下标索引数组 通过'@'或'*'或关联数组名称,结果不同 如下面所描述的。如果省略length,则会扩展为子串 参数的值从offset指定的字符开始 并延伸到价值的末尾。长度和偏移量 算术表达式(参见Shell算术)。
如果offset的计算结果小于零,则该值用作 从参数值的末尾开始的字符偏移量。如果 length计算为小于零的数字,它被解释为 从参数值的末尾开始的字符偏移 比一些字符,扩展是字符 在偏移和结果之间。请注意,负偏移必须是 与结肠分开至少一个空间以避免混淆 用': - '扩展。
答案 2 :(得分:2)
使用正则表达式,您可以选择匹配单个字符或带有任意8个字符前缀的字符串:
if [[ ${q:8:1} =~ [ABCDE] ]]; then
if [[ $q =~ ^.{8}[ABCDE] ]]; then
您也可以使用模式匹配,但在这种情况下,它看起来与正则表达式完全相同:
if [[ ${q:8:1} == [ABCDE] ]]; then
答案 3 :(得分:1)
试试:
if [[ ${q:9:1} =~ [ABCDE] ]]; then
${q:9}
返回第9个开头的所有字符(注意,计数从0开始)。 ${q:9:1}
仅返回第9个字符中的一个字符。 =~
运算符是"匹配正则表达式"操作