linux – 在shell中,用点作为分隔符拆分字符串的一部分

我是shell脚本的新手,请你帮忙解决以下问题,谢谢.

$AU_NAME=AU_MSM3-3.7-00.01.02.03
#separate the string after last "-", with "." as delimiter
#that is, separate "00.01.02.03" and print/save as below.
major=00
minor=01
micro=02
build=03
首先,请注意在分配给shell中的参数时不要使用$.你的第一行应该是这样的:

AU_NAME=AU_MSM3-3.7-00.01.02.03

一旦你有了,那么你可以这样做:

IFS=. read major minor micro build <<EOF
${AU_NAME##*-}
EOF

其中## * – 从字符串的开头到最后一个’ – ‘删除所有内容,只留下“00.01.02.03”,IFS(内部字段分隔符)变量告诉shell将字符串分成字段的位置.

在bash,zsh和ksh93中,您可以通过将here-document缩短为here-string来将其转换为一行:

IFS=. read major minor micro build <<<"${AU_NAME##*-}"

更一般地说,在那些相同的shell(或任何其他具有数组的shell)中,您可以拆分成任意大小的数组而不是不同的变量.这适用于给定的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]}
翻译自:https://stackoverflow.com/questions/19915452/in-shell-split-a-portion-of-a-string-with-dot-as-delimiter

转载注明原文:linux – 在shell中,用点作为分隔符拆分字符串的一部分