在shell脚本中插入包含双引号的字符串

2024-09-28 17:00:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想以原始格式将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-like:

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
)

但这不是我想要的

我错过什么了吗


Tags: 字符串代码脚本jsonfooemailcheck格式
1条回答
网友
1楼 · 发布于 2024-09-28 17:00:06

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

还需要将$FOO用双引号括起来,否则在shell执行分词之后,它的内容中会丢失换行符

import shlex

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

Online demo

相关问题 更多 >