You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:15:11