因此,我試圖從我的 Shell 腳本中的屬性中提取特定短語以供稍后使用(它將用作 Git 提交中的注釋)。
我將稱之為 release.properties 的屬性檔案看起來像這樣:
#Created by build system, do not modify
#Tue Dec 28
git.revision=aaaaa
build.number=1111
app.name=xxxx
app.version=x.y
我想從上面的檔案中獲取字串“xy1111”。
我目前的解決方案如下:
input=$(cat release.properties)
arrayIN=(${input//=/ })
length=${#arrayIN[@]}
let length=$length-1
versionComment="${arrayIN[$length]}.${arrayIN[16]}"
請注意,陣列中的索引 16 在示例中可能不是正確的,但對于我使用的實際檔案是正確的,它只是應該提取值 1111。
因此,versionComment 將包含帶有我想要的版本的字串:xy1111
但是,我面臨的問題是我已經硬編碼了 build.number 和 app.version 資訊出現在屬性檔案中的位置。
有時,生成屬性檔案時,build.number 和 app.version 不在同一行。它可能看起來像:
#Created by build system, do not modify
#Tue Dec 28
build.number=1111
app.name=xxxx
app.version=x.y
git.revision=aaaaa
這當然會破壞版本注釋。
我想知道是否有一種方法可以將 release.properties 檔案中的所有資訊更改為存盤在某個物件中的鍵值對,然后獲取適當的值來創建版本注釋。但是,我不清楚 Shell 是否存在這樣的資料結構。
當然,我也愿意接受其他解決方案。謝謝你。
uj5u.com熱心網友回復:
我會寫
while IFS="=" read -r prop value; do
case $prop in
"build.number") num=$value ;;
"app.version") ver=$value ;;
esac
done < release.properties
wanted="$ver.$num"
echo "$wanted" # => x.y.1111
uj5u.com熱心網友回復:
流程release.properties轉性變成有效的shell變數名,并動態地將其匯入到bash腳本,使得shellified性能直接可以作為shell變數。
#!/usr/bin/env bash
# shellcheck disable=SC1090 # dynamically import shellified variables
. <(sed 's/^[^.]*\.//' release.properties)
# shellcheck disable=SC2154 # dynamically imported
printf '%s.%s\n' "$version" "$number"
uj5u.com熱心網友回復:
如果build.number總是在app.version此之前,則此sed單行應該完成任務:
sed -n -e '/^build\.number=/{s///;h;}' -e '/^app\.version=/{s///;G;s/\n/./p;q;}' file
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/396791.html
下一篇:c語言中shell實作的問題
