首先,请注意您不使用$
在 shell 中分配给参数时。你的第一行应该是这样的:
AU_NAME=AU_MSM3-3.7-00.01.02.03
The $
用于获取分配后的参数值。以及之后的位$
可以是花括号中的表达式,除了名称之外还包含其他内容,允许您对值执行各种操作。例如,您可以执行以下操作:
IFS=. read major minor micro build <<EOF
${AU_NAME##*-}
EOF
哪里的##*-
删除从字符串开头到最后一个“-”的所有内容,只留下“00.01.02.03”,并且 IFS(内部字段分隔符)参数告诉 shell 在哪里将字符串分成字段。
在 bash、zsh 和 ksh93+ 中,您可以通过将此处文档缩短为此处字符串来将其放在一行中:
IFS=. read major minor micro build <<<"${AU_NAME##*-}"
更一般地说,在这些相同的 shell 中,您可以拆分为任意大小的数组而不是不同的变量:
IFS=. components=(${AU_NAME##*-})
(尽管该语法在特别古老的 ksh 版本中不起作用;在它们中你必须这样做:
IFS=. set -A components ${AU_NAME##*-}
)
这就得到了这个等价性(除了 zsh 之外,它默认将元素编号为 1-4 而不是 0-3):
major=${components[0]}
minor=${components[1]}
micro=${components[2]}
build=${components[3]}