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

Bitbucket Pipeline中Bash脚本无法去除回车符问题求助

Bash脚本在Bitbucket Pipeline中出现多余回车符问题

我编写了一段Bash脚本,功能是读取CSV文件、查找指定行并将结果拼接为字符串。该脚本在本地Git Bash中运行完全正常,但在Bitbucket Pipeline执行时会产生多余的回车符,我尝试了多种方法都无法去除,已经困扰多日。

我的Bash脚本

function getTestClassLst(){ 
    file="apex-cls-map.csv"   

    while IFS="," read -r col_clsname col_clsList
    do
            
        if [[ $col_clsname == $1 ]];
        then 
            
            textsize=$(expr length $col_clsList)

            if [[ $textsize -gt 1 ]];
            then                     
                unitclsLst=$(echo "$col_clsList" | sed "s/.cls//g")                   
            fi    
                     
        fi       
    
    done < <(tail -n +2 $file)
}

function getTstForClassFromCommit(){     
    clsLst=""       
    unitclsLst=""

    while read line; do  
        #filter only for classes  
        if [[ $line == *.cls ]];
        then            
            clsname=${line#*classes/}                
            getTestClassLst $clsname           
            echo "## test class : $unitclsLst"
        fi  
        #filter for trigger
        if [[ $line == *.trigger ]];
        then        
            triggername=${line#*triggers/}                
            getTestClassLst $triggername
            echo "## test class for trigger : $unitclsLst"
        fi  

        #check if matched found (not empty)
        if [ ! -z "$unitclsLst" ];
        then
            #check if test class not already included
            if [[ $clsLst != *$unitclsLst* ]];
            then                
                clsLst+="$unitclsLst,"            
                echo "## list : $clsLst"
            fi           
        fi                  
            
    done < cpath.txt
    #remove last char which is a ,    
    cl=${clsLst%?}        
    #remove " from string for those with multiple test class for one class    
    echo "## TEST_CLS_LST =  $cl" | sed 's/"//g'
}

其中getTestClassLst函数遍历CSV文件并返回指定列的值,getTstForClassFromCommit函数遍历文本文件中的文件名并在CSV中检索对应内容。

本地Git Bash运行结果

## test class : User_DMN_TEST
## list : User_DMN_TEST,
## test class for trigger : DocuSignStatus_DMN_TST
## list : User_DMN_TEST,DocuSignStatus_DMN_TST,
## test class for trigger : DocuSignStatus_DMN_TST
## TEST_CLS_LST =  User_DMN_TEST,DocuSignStatus_DMN_TST

Bitbucket Pipeline运行结果

## test class : User_DMN_TEST
## list : User_DMN_TEST
,
## test class for trigger : DocuSignStatus_DMN_TST
## list : User_DMN_TEST
,DocuSignStatus_DMN_TST
,
## test class for trigger : DocuSignStatus_DMN_TST
## TEST_CLS_LST =  User_DMN_TEST
,DocuSignStatus_DMN_TST

已尝试但无效的去回车符方法

echo "## TEST_CLS_LST =  $cl" | sed -e 's/"//g' -e 's/\n//g'
echo "## TEST_CLS_LST =  $cl" | sed -e 's/"//g' -e 's/\\n//g'
echo $(tr -d '\n' < testCls.lst) # 将字符串存入文件后替换并显示
# 将字符串存入数组,替换数组分隔符为,后显示文本
IFS=',';echo "${arrayOfCls[*]}";IFS=$' \t\n'

内容的提问来源于stack exchange,提问作者vanessen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:52:56