[英]Change a Number inside a Variable
我有以下問題:(關於日期)用戶將設置以下變量。
variable1 = 33_2016
現在我以某種方式想要自動設置第二個變量,該變量設置我得到的“ 33” +1
variable2 = 34_2016
感謝您的任何建議。
我的第一選擇是將第一個變量與read
分開,然后將(更新的)片段放在一起。
IFS=_ read f1 f2 <<< "$variable1"
# Option 1
variable2=$((f1 + 1))_$f2
# Option 2
printf -v variable2 '%s_%s" "$((f1 + 1))" "$f2"
您還可以使用參數擴展進行解析:
f1=${variable%_*}
f2=${variable#*_}
您還可以使用一個正則表達式,該正則表達式在解析時更易讀,但是將它們放回原處的時間更長( BASH_REMATCH
可以使用較短的同義詞)。
[[ $variable1 =~ (.*)_(.*) ]] &&
f1=$((${BASH_REMATCH[1]}+1)) f2=${BASH_REMATCH[2]}
第一個和第三個選項還允許使用數組:
# With read -a
IFS=_ read -a f <<< "$variable1"
variable2=$(IFS=_; echo "${f[*]}")
# With regular expression
[[ $variable1 =~ (.*)_(.*) ]]
variable2=$(IFS=_; echo "${BASH_REMATCH[*]:1:2}")
您可以使用awk
:
awk 'BEGIN{FS=OFS="_"}{$1+=1}1' <<< "${variable1}"
盡管這需要一個外部程序來生成(速度較慢),但讀取/寫入更容易。 在這里自己決定什么對您更重要。
要將返回值存儲在變量中,請使用命令替換:
variable2=$(awk 'BEGIN{FS=OFS="_"}{$1+=1}1' <<< "${variable1}")
您可以使用帶子串替換的 參數擴展來做一些相同的事情,例如
$ v1=33_2016
$ v2=${v1/${v1%_*}/$((${v1%_*}+1))}
$ echo $v2
34_2016
這是六比一, 半打到另一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.