簡體   English   中英

更改變量中的數字

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM