首页 > 解决方案 > 在 shell 脚本中插入包含双引号的字符串

问题描述

我想以原始格式将 json 字符串从 python 代码传递给 shell 脚本;

json_val = check_input_file['Item']['mappings']['S']
print(json_val) 

上面代码的输出是:

{
    "1": [
        "skipColumn"
    ],
    "2": [
        "firstname"
    ],
    "3": [
        "lastname"
    ],
    "4": [
        "email"
    ],
    "5": [
        "skipColumn"
    ],
    "6": [
        "ipaddress"
    ]
}

所以现在我传递json_val给shell,比如:

init_script = '''#!/bin/bash 
       FOO="{0}"
       echo $FOO
        '''.format(json_val)

在 FOO 变量中,我得到不带双引号的字符串,但我希望它与上面相同。

我尝试过这样的事情

MAPPINGS=$(cat <<EOF
{"1":["skipColumn"],"2":["firstname"],"3":["lastname"],"4":["email"],"5":["skipColumn"],"6":["ipaddress"]}
EOF
)

但这不是我想要的。

我错过了什么吗?

标签: pythonbash

解决方案


您需要转义json_val以使用 shell,否则在 shell 执行引号删除时将删除双引号。

还必须$FOO用双引号引起来,否则在 shell 执行分词后,您会丢失其内容中的换行符。

import shlex

init_script = '''
#!/bin/bash -
FOO={}
echo "$FOO"
'''.format(shlex.quote(json_val))

在线演示


推荐阅读