bash将包含空格的参数传递给外部脚本失败

时间:2017-07-13 14:54:19

标签: bash

我试图让bash脚本调用带有可选参数的python脚本。 当此参数相关时,必须为其提供前缀标记(例如-o "value")。

由于该值包含空格,因此我在其周围放置了引号。但是,在此用例中,它无效

任何黑客都可以解决它?

test.py

#!/usr/bin/env python
import argparse


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('-o', '--options', default='', type=str, required=False)
    args = parser.parse_args()
    print args.options


if __name__ == '__main__':
    main()

tests.sh

#!/bin/bash

export options="A B C"

export extra_args=""
if [ -n "${options}" ]; then
    export extra_args="${extra_args} -o \"${options}\""
fi

./tests.py $extra_args

enter image description here

1 个答案:

答案 0 :(得分:2)

${extra_args}中的

引号是字面的,不是由bash解释的,bash扩展只运行一次。

看起来你需要一个数组,导出只是告诉shell必须将变量传递给子进程环境。

extra_args=()
if [ -n "${options}" ]; then
    extra_args+=( -o "${options}" )
fi

./tests.py "${extra_args[@]}"