首页 文章

将参数循环附加到CLI命令

提问于
浏览
0

我想向python命令提供存储在file.Example中的多个参数

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

我试图:从文件中读取它们并以数组或字符串存储 . 当然,欢迎任何最佳解决方案 . 但是,在使用循环/连接字符串并将变量提供给命令时,使用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

考虑到文件内容是:

月亮 - 煎饼

太阳星星

脚本中的输出:

  • 手动提供时应该如何 - 例如--param =“moon - pancake”等 .

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

  • 通过添加循环或连接字符串完成后的样子:

param =(你'月亮 - 煎饼' - param =“太阳 - 星星”',)

Prolly与字符串有关;许多“声明 . 我做错了什么,是否有更好的bash解决方案呢?

1 回答

  • 1

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

    您应该删除它周围的引号 - 这次 - 所有空格字符都被视为参数分隔符:

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

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

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

相关问题