将PowerShell版本号修改脚本转为Linux Shell脚本求助
问题:Shell脚本无法修改AssemblyInfo.cs的AssemblyVersion值
在构建服务器中,需要为AssemblyInfo.cs文件的AssemblyVersion添加构建号。原PowerShell脚本可完成提取当前版本、拼接构建号并覆盖版本值的功能,代码如下:
$oldValue = (Get-Content .\AssemblyInfo.cs | Select-String -pattern "AssemblyVersion").Line.Split('"')[1] $newValue = $oldValue + "." + $Env:BUILD_NUMBER (Get-Content .\AssemblyInfo.cs).replace($oldValue, $newValue) | Set-Content .\AssemblyInfo.cs
尝试用Shell脚本实现相同功能时,已成功提取版本并打印,但无法覆盖AssemblyVersion值,当前Shell代码:
export server_version=`grep AssemblyVersion AssemblyInfo.cs | awk '{split($0,a,"\""); print a[2]}'| sed "s/'//g" | awk '{$1=$1;print}'` echo Server version is ${server_version} sed -i 's/${server_version}/${server_version}.${BUILD_NUMBER}/g' AssemblyInfo.cs
问题原因
sed命令使用了单引号,单引号中的变量不会被Shell解析,导致${server_version}和${BUILD_NUMBER}以原字符串形式传入sed,无法匹配到实际的版本值进行替换。
修正后的Shell脚本
# 提取AssemblyVersion中的版本号(简化提取逻辑) server_version=$(grep 'AssemblyVersion' AssemblyInfo.cs | awk -F '"' '{print $2}') echo "Server version is ${server_version}" # 使用双引号让Shell解析变量,完成版本号拼接替换 sed -i "s/${server_version}/${server_version}.${BUILD_NUMBER}/g" AssemblyInfo.cs
输入输出示例
输入AssemblyInfo.cs内容:
[assembly: AssemblyVersion("0.3.0")]
当环境变量BUILD_NUMBER为5时,期望输出:
[assembly: AssemblyVersion("0.3.0.5")]
内容的提问来源于stack exchange,提问作者jsirr13
相关产品推荐
相关产品推荐

