在函数之间传递元素。得到负面结果

时间:2019-02-04 07:51:36

标签: bash shell scripting

我正在使用中心休息功能:https://github.com/blackducksoftware/hub-rest-bash

我在根文件夹的新“ test.bash”脚本中有一个字符串数组:

get_groups=( "ABC MM CC IT Test RW" "ABC GG CMN IOSS Test RW" "ABC WW IMG IMGE Test RW" )

我需要从每个字符串中获取第四个元素,然后将它们从“ project-functions.bash”传递给函数“ create_project()”:

for (( var = 0; var < ${#get_groups[*]}; var++ ));
do
  get_projectname_from_user_group=$(echo ${get_groups[$var]} | cut -d ' ' -f 4)
  create_project ${get_projectname_from_user_group}
done

当我转到函数“ create_project()”并尝试显示POST_ARGS时:

echo ${POST_ARGS[@]}

我得到了积极的结果:

-d {"name": "IT", "versionRequest": {"versionName": "1.0", "phase": "PLANNING", "distribution": "INTERNAL"}} --header Content-Type: application/json
-d {"name": "IOSS", "versionRequest": {"versionName": "1.0", "phase": "PLANNING", "distribution": "INTERNAL"}} --header Content-Type: application/json
-d {"name": "IMGE", "versionRequest": {"versionName": "1.0", "phase": "PLANNING", "distribution": "INTERNAL"}} --header Content-Type: application/json

在函数“ project_name”的末尾,您可以找到帖子$ path。当我转到函数“ post()”并尝试在其中显示POST_ARGS时:

echo ${POST_ARGS[@]}

我知道了

-d {"name": "IT", "versionRequest": {"versionName": "1.0", "phase": "PLANNING", "distribution": "INTERNAL"}} --header Content-Type: application/json
./rbac_mapping_to_bd.bash: line 54: cut: No such file or directory
-d {"name": "", "versionRequest": {"versionName": "1.0", "phase": "PLANNING", "distribution": "INTERNAL"}} --header Content-Type: application/json
./rbac_mapping_to_bd.bash: line 54: cut: No such file or directory
-d {"name": "", "versionRequest": {"versionName": "1.0", "phase": "PLANNING", "distribution": "INTERNAL"}} --header Content-Type: application/json

这意味着,对于第一行,它工作正常,但对于接下来的2行,则行不通。我能做什么?

2 个答案:

答案 0 :(得分:1)

要获取get_groups的每个元素中的第四个元素,您可以简单地使用一个临时数组,并将get_groups的每个元素拆分为临时数组,而无需使用您需要的第四个元素。例如

get_groups=("ABC MM CC IT Test RW"
            "ABC GG CMN IOSS Test RW"
            "ABC WW IMG IMGE Test RW")

for i in "${get_groups[@]}"; do     ## loop over each element 
    tmp=( $(echo $i) )              ## split element into tmp array
    echo ${tmp[3]}                  ## output 4th element
done

注意:需要在"${get_groups[@]}"循环声明中的for周围加上双引号,并通过命令替换$i传递给echo用于确保发生分词。)

使用/输出示例

将以上内容复制/粘贴到终端中将产生:

IT
IOSS
IMGE

让我知道这是否不是您所需要的。您可以将第四个元素传递给所需的任何函数,而不是像上面那样将其输出。

答案 1 :(得分:0)

尝试一下-

    for i in ${!get_groups[*]}; do 
        get_projectname_from_user_group=`echo "${get_groups[$i]}" | awk -F" " '{print $4}'`
        if ! [ -z "$get_projectname_from_user_group" ]; then
            create_project "$get_projectname_from_user_group"
        fi
    done