我希望能夠從版本字串中提取各個數字并將每個值分配給一個變數。
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)
uj5u.com熱心網友回復:
您可以VERSION通過更改IFS( Internal Field Separator ) 的值來分隔這些值。確保您保存舊值(默認值space, tab, newline)并IFS在閱讀后恢復。設定新值,IFS以便為您的'.'bash 分詞,例如'.'read
#!/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
uj5u.com熱心網友回復:
您可以使用awk它,因為您的常用分隔符是..
例如:
a=$(echo "$VERSION" | awk -F'.' '{print $1}'
b=$(echo "$VERSION" | awk -F'.' '{print $2}'
c=$(echo "$VERSION" | awk -F'.' '{print $3}'
我通常發現該awk語法是最直接的,但我理解想要使用cut. 您的語法非常接近,但您只需要使用-d.
例如:
a=$(echo "$VERSION" | cut -d'.' -f1)
...
uj5u.com熱心網友回復:
awk/cut假設 OP 可能希望保持原始形式的輸入,我們可以用一個IFS/read/here-string組合消除六個子行程(3x ):
VERSION='1.16.0' # result of OP's 'read -p " " VERSION'
IFS=. read -r a b c <<< "${VERSION}"
注意:在這種情況下,IFS更改僅限于read呼叫范圍(即,無需保存/設定/重置IFS)
結果:
$ typeset -p a b c
declare -- a="1"
declare -- b="16"
declare -- c="0"
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/487310.html
上一篇:比較bash腳本中的日期
