将命令的输出分配给数组变量并逐一处理

时间:2019-05-07 17:32:25

标签: arrays shell

我需要执行命令以找到具有某些版本号的应用程序。我正在读取包含应用程序名称和版本号的CSV文件。对于文件中的每个应用程序,我正在搜索具有该应用程序名称的文件,并从这些文件中获取版本号,并将其与文件中的版本号进行比较。在某些情况下,grep命令将返回多个值。我正在尝试将这些值分配给数组变量。但是,我无法一一访问这些值。当我尝试从数组访问第一个值时,它将返回整个数组

使用数组变量来存储命令中的多个值,并尝试使用FOR和WHILE循环来逐一读取数组中的值。

 #!/bin/bash 
 IFS="," 
declare -a apps 
while read f1 f2 
do
        #versionFromSVN=($(grep -Hnr versionProperty . | grep $f1 | awk {'print $2'} | sed -e  's/<versionProperty>\(.*\)<\/versionProperty>/\1/'))
        apps=( $(grep -Hnr versionProperty . | grep $f1 |grep -v 'test' | awk {'print $1'} |  cut -d ':' -f 1) )
        echo $apps
        for (( i=0;i<${#apps[@]};i++ ));
        do
                echo "Current App path is: " ${apps[i]};
                versionFromSVN=$(grep -Hnr versionProperty . | grep ${apps[i]} | awk {'print $2'} | sed -e  's/<versionProperty>\(.*\)<\/versionProperty>/\1/');
                echo "Version Number in iteration " $i ${apps[i]} $versionFromSVN;
                if [ "$versionFromSVN" -ge $f2 ]
                then
                        appPath=$(grep -Hnr versionProperty . | grep $f1 | awk {'print $1'})
                        echo $appPath $versionFromSVN >> result.csv
                fi
        done 
done < $1 
exit 0

预期:当前应用程序路径为:./SaveoDatabase_root/Deployment/LoadSFDCDataToPortal.archive

实际结果: 当前应用程序路径为:./SaveToDatabase_root/Deployment/LoadSFDCDataToPortal.archive ./SaveToDatabase/Deployment/LoadSFDCDataToPortal.archive

0 个答案:

没有答案