bash - 如何拆分版本号并将每个版本号分配给一个变量?

标签 bash shell

我希望能够从版本字符串中提取单个数字并将每个值分配给一个变量。

echo -en "Please Enter A "$RPM_FILTER" Version Number (e.g. "$VER_EXAMPLE"):"

我希望能够分配例如 1 到 $a,16 到 $b 和 0 到 $c,用于 sed 过滤器。

Specify Version Number (y/n)? y
Please Enter A Version Number (e.g. 1.16.0): 1.16.0
read -p " " VERSION

我目前正在使用这个,但是当个人版本号是两位数时,这不起作用。

declare -i a=$(printf "%s\n" "$VERSION" | cut -c 1)
declare -i b=$(printf "%s\n" "$VERSION" | cut -c 3)
declare -i c=$(printf "%s\n" "$VERSION" | cut -c 5)

最佳答案

您可以简单地通过更改 IFS(内部字段分隔符)的值来分隔 VERSION 中的值。确保保存旧值(默认 spacetabnewline)并在阅读后恢复 IFS。将 IFS 的新值设置为 '.',以便在 '.' 上进行 bash 分词以供您阅读 ,例如

#!/bin/bash

printf "Please Enter A Version Number (e.g. 1.16.0): "
oldifs="$IFS"
IFS=$'.'
read a b c
IFS="$oldifs"

printf "%s %s %s\n" $a $b $c

(注意设置IFS可以作为read行的一部分来完成,这样就不必保存旧的IFS 值并在完成后恢复它,例如 IFS=$'.' read a b c)

示例使用/输出

$ bash myscript.sh
Please Enter A Version Number (e.g. 1.16.0): 1.16.0
1 16 0

关于bash - 如何拆分版本号并将每个版本号分配给一个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72505032/

相关文章:

bash - 在 Cygwin 上加速文件比较(与 `cmp` )?

bash - 使用 find 和 mv 更改嵌套文件夹中的名称(版本号)

LINUX:如何软链接(soft link)所有子目录中的特定文件

excel - 如何加速 VBA for Mac 中的 shell 函数

shell - 循环oneliner的 fish shell

xcode - 如何从 Xcode 中的 shell 脚本文件运行脚本?

linux - 如何授予权限,以便用户是唯一可以修改的用户?

ruby - 使用 ansible playbook 更改 rvm ruby​​ 版本

PHP 执行 python 不工作

bash - 使 Gradle 任务可以访问环境变量