循环添加参数到CLI命令

时间:2018-12-09 10:46:23

标签: bash loops command-line-interface

我想向python命令提供文件中存储的多个参数。示例

command \
--param="var1" \
--param="var2" \
--param="var3 var3"

我正在尝试:从文件中读取它们并存储为数组或字符串。当然,任何最佳解决方案都是值得欢迎的。但是,在使用循环/连接字符串并将变量提供给command时,通过python脚本进行解析存在一个问题。

stringparam=""
declare -a myarray=()

while read -r line || [[ -n "$line" ]]; do
    if [ ! -z "$line" ]; then
        myarray[$index]="--param=\"$line\""
        index=$(($index+1))
        stringparam+="--param=\"${line}\" "
    fi
done < "${input_file}"

echo ${myarray[@]}
echo "${prontos}"


# Execution
python_lib \
    "${force}" \
    --p1="${varp1}" \
    --p2="${varp2}" \
    --p3="${varp3}" \
    --p4="${varp4}" \
    --p5="${varp5}" \
    "$(for i in "${myarray[@]}"; do echo ${i}; done)" # approach 1
    "${stringparam}" # approach 2

考虑文件内容为:

月亮-煎饼

太阳-星星

脚本输出:

  1. 手动提供时的外观,即--param =“ moon-pancake”等。

    param =(u'moon-pancake',u'sun-star star')

  2. 通过添加循环或串联字符串完成后的外观:

    param =(u'“ moon-pancake” --param =“ sun-star star”',)

可能与字符串有关;许多“声明。我在做什么错,有没有更好的bash解决方案?

1 个答案:

答案 0 :(得分:1)

我认为您的第二种方法更像GNU / Bash,但是您不应该在其周围使用引号,否则$ stringparam的全部内容将被您的python-lib可执行文件视为唯一参数。

您应该暂时删除其引号-这次-所有空格字符均应视为参数分隔符:

# Execution
python_lib \
    "${force}" \
    --p1="${varp1}" \
    --p2="${varp2}" \
    --p3="${varp3}" \
    --p4="${varp4}" \
    --p5="${varp5}" \
    $stringparam # approach 2

但是为避免单引号和双引号混合出现问题,在构建$ stringparam变量时应使用简单的引号:

stringparam="$stringparam --param='${line}'"