<分区>
我是 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
#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 中,您可以拆分成任意大小的数组而不是不同的变量:
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]}
关于linux - 在 shell 中,用点作为分隔符拆分字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19915452/
相关文章:
linux - 为什么 rwxrwxrwx 文件不允许 chmod 777?
android - 在 Android 之外实现 Wifi 感知应用程序
python - 在一个 Bundle 中轻松部署 Python 和应用程序,适用于 Linux
mysql - 如何在使用 shell 脚本将 csv 插入 mysql 时删除第一行
shell - 使用 shell() 执行多个 shell 命令的推荐方法
linux - 如何编写全屏 Linux 控制台应用程序/脚本?
linux - 如何添加用户以供本地 Powershell 使用? ( Jenkins 和本地主机用户模拟?)
php - 如何使用 PHP 脚本提取 TNEF winmail.dat?