python - 在 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
)
但这不是我想要的。
我错过了什么吗?
解决方案
您需要转义json_val
以使用 shell,否则在 shell 执行引号删除时将删除双引号。
还必须$FOO
用双引号引起来,否则在 shell 执行分词后,您会丢失其内容中的换行符。
import shlex
init_script = '''
#!/bin/bash -
FOO={}
echo "$FOO"
'''.format(shlex.quote(json_val))