我正在开发一个shell脚本,我希望在不声明函数的情况下将以下内容作为shell脚本的一部分。基本上,我想在不声明函数的情况下将以下代码转换为shell脚本。
const mapStateToProps = (state, ownProps) => {return {user: state.user}}
进入shell脚本。我做了以下,
#!/bin/bash
function json2keyvalue {
cat<<EOF | jq -r 'to_entries|map("\(.key)\t\(.value|tostring)")[]'
{
"hello1": "world1",
"testk": "testv"
}
EOF
}
while IFS=$'\t' read -r key value
do
export "$key"="$value"
done < <(json2keyvalue)
但这似乎不起作用。当我运行shell脚本时,它会给出如下错误,其中文件名为values='{"hello1":"world1","hello1.world1.abc1":"hello2.world2.abc2","testk":"testv"}'
while IFS=$'\t' read -r key value
do
export "$key"="$value"
done < < (echo $values | jq -r 'to_entries|map("\(.key)\t\(.value|tostring)")[]')
。
abc.sh
该脚本采用如下的JSON,并将键值转换为环境变量。
./abc.sh: line 6: syntax error near unexpected token `<'
./abc.sh: line 6: `done < < (jq -r 'to_entries|map("\(.key)\t\(.value|tostring)")[]' <<<"$values")'
答案 0 :(得分:2)
我建议:
#!/bin/bash
shopt -s lastpipe
cat <<EOF | jq -r 'to_entries|map("\(.key)\t\(.value|tostring)")[]' | while IFS=$'\t' read -r key value; do export "$key"="$value"; done
{
"hello1": "world1",
"testk": "testv"
}
EOF
lastpipe
:如果设置,并且作业控制未激活,则shell将运行当前shell环境中未在后台执行的管道的最后一个命令。
<强>更新强>:
如果变量$values
包含有效的json代码,则应该有效:
#!/bin/bash
shopt -s lastpipe
values='place valid json code here'
echo "$values" | jq -r 'to_entries|map("\(.key)\t\(.value|tostring)")[]' | while IFS=$'\t' read -r key value; do export "$key"="$value"; done