该表达式是否有正确的键值对修复程序 输出

问题描述

我有这个python脚本,以原始字符串格式打印此输出

library(tidyverse)

fac_levels <- c("NDVI","SR","WBI","NWI-1","NWI-2","NWI-3","NWI-4","1650/2220 nm ratio")
df %>% 
  pivot_longer(-Models,values_drop_na = TRUE)  %>%
  mutate(Models = factor(Models,levels = fac_levels),name = factor(name,levels = rev(fac_levels)),p.value = cut(value,c(max(value,na.rm = T),0.05,0.01,min(value,na.rm = T)),labels = c("NS","< 0.05","< 0.01"))) %>%
  ggplot(aes(x=Models,y=name,fill=p.value)) +
  theme_bw() +
  geom_tile() + 
  xlab("Parameters") + ylab(" ") + 
  theme(text=element_text(size=18,family="serif"))+
  scale_colour_manual(values = c("#DAA520","#F5DEB3","#FFF8DC","#DCDCDC"),aesthetics = c("colour","fill")) +
  geom_text(aes(label=format(round(value,2),nsmall = 2)),color="black",size=2) + 
  scale_x_discrete(drop=FALSE) +
  scale_y_discrete(drop=FALSE) 

我正在使用jq来设置A,B和c的值

类似这样的东西

{"A":"ab3241c","B":"d12e31234f","c":"[g$x>Q)M&.N+v8"}

A和B都可以正常工作。当我做类似的事情

expression='. | to_entries | .[] | .key + "=\"" + .value + "\""'
eval "$(python script.py | jq -r "$expression")"

但是问题出在c上,我得到的输出

echo $A
ab3241c

所以$ x>和&转换为unicode。 我可以修正表达式以避免这种情况吗?

我使用修复了它 表示为

[g\u003eQ)M\u0026.N+v8

解决方法

在这里使用eval就像在脚上射击自己。

为什么不仅仅将python命令的输出通过管道传递给jq命令?

考虑:

function mypython {
  cat <<"EOF"
{"A":"ab3241c","B":"d12e31234f","c":"[g$x>Q)M&.N+v8"}
EOF
}

expression='to_entries[] | .key + "=\"" + .value + "\""'

mypython | jq -r "$expression"

请注意,在此处使用expression似乎也毫无意义。通常,最好是“内联”它,或将其放在文件中并使用jq的-f命令行选项。

(请注意,expression中不需要第一个“。”。)

,

如果您确实必须使用eval,请考虑:

function mypython {
  cat <<"EOF"
{"A":"ab3241c","c":"[g$x>Q)M&.N+v8"}
EOF
}

expression='to_entries[] | .key + \"=\\\"\" + .value + \"\\\"\"'

eval "mypython | jq -r \"$expression\""

输出

A="ab3241c"
B="d12e31234f"
c="[g$x>Q)M&.N+v8"