我有剧本:
#!/usr/bin/env sh
phone='+1234567890'
firstname='Donald'
lastname='Trump'
birthdate='1946-06-14'
json=$(cat <<EOF
{
"firstname" : "$firstname",
"lastname" : "$lastname" ,
"birthdate" : "$birthdate",
"phone" : "$phone" ,
"department": "d45a7caa-a56c-43c2-be33-7064064856be",
"status" : "candidate"
}
EOF)
curl --json "$json" 'https://usa.example.com/president/elect'
我在 zsh 交互式 shell 中运行。它工作完美。现在我将第一行更改为
#!/usr/bin/env zsh
并且失败了
parse error near `json=$(cat <<EOF'
如何将多行字符串值替换为 zsh 中的变量?
)
的结束语 json=$()
必须位于单独的一行,而不是在 EOF
之后:
#!/usr/bin/env zsh
phone='+1234567890'
firstname='Donald'
lastname='Trump'
birthdate='1946-06-14'
json=$(cat <<EOF
{
"firstname" : "$firstname",
"lastname" : "$lastname" ,
"birthdate" : "$birthdate",
"phone" : "$phone" ,
"department": "d45a7caa-a56c-43c2-be33-7064064856be",
"status" : "candidate"
}
EOF
)
curl --json "$json" 'https://usa.example.com/president/elect'
请记住,手动生成复杂的 JSON 结构会带来问题。您介意使用像 jq 这样的工具来正确生成 JSON。