首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >shell脚本:返回错误的输出

shell脚本:返回错误的输出
EN

Stack Overflow用户
提问于 2022-04-06 19:12:40
回答 2查看 66关注 0票数 0

在给定的脚本中,嵌套的键不会被附加到值中。我不知道剧本哪里出错了。

代码语言:javascript
运行
复制
#!/bin/bash

echo "Add the figma json file path"
read path

figma_json="$(echo -e "${path}" | tr -d '[:space:]')"

echo $(cat $figma_json | jq -r '.color | to_entries[] | "\(.key):\(.value| if .value == null then .[] | .value  else .value end)"')

样本输入:

代码语言:javascript
运行
复制
{
  "color": {
    "white": {
      "description": "this is just plain white color",
      "type": "color",
      "value": "#ffffffff",
      "extensions": {
        "org.lukasoppermann.figmaDesignTokens": {
          "styleId": "S:40940df38088633aa746892469dd674de8b147eb,",
          "exportKey": "color"
        }
      }
    },
    "gray": {
      "50": {
        "description": "",
        "type": "color",
        "value": "#fafafaff",
        "extensions": {
          "org.lukasoppermann.figmaDesignTokens": {
            "styleId": "S:748a0078c39ca645fbcb4b2a5585e5b0d84e5fd7,",
            "exportKey": "color"
          }
        }
      }
    }
  }
}

实际产出:

代码语言:javascript
运行
复制
white:#ffffffff gray:#fafafaff 

例外产出:

代码语言:javascript
运行
复制
white:#ffffffff gray:50:#fafafaff

全输入文件

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-06 20:04:15

下面是一种使用tostream而不是to_entries来同时访问完整路径及其值的解决方案:

代码语言:javascript
运行
复制
jq -r '
  .color | tostream | select(.[0][-1] == "value" and has(1)) | .[0][:-1]+.[1:] | join(":")
' "$figma_json"
代码语言:javascript
运行
复制
white:#ffffffff
gray:50:#fafafaff

演示

票数 2
EN

Stack Overflow用户

发布于 2022-04-06 20:09:12

一种试图演示bash最佳实践的方法:

代码语言:javascript
运行
复制
#!/bin/bash

figma_json=$1                              # prefer command-line arguments to prompts
[[ $figma_json ]] || {
  read -r -p 'Figma JSON file path: ' path # read -r means backslashes not munged
  figma_json=${path//[[:space:]]/}         # parameter expansion is more efficient than tr
}

jq -r '
  def recurse_for_value($prefix):
    to_entries[]
    | .key as $current_key
    | .value?.value? as $immediate_value
    | if $immediate_value == null then
        .value | recurse_for_value(
                   if $prefix != "" then
                     $prefix + ":" + $current_key
                   else
                     $current_key
                   end
                 )
      else
        if $prefix == "" then
          "\($current_key):\($immediate_value)"
        else
          "\($prefix):\($current_key):\($immediate_value)"
        end
      end
    ;
  .color |
  recurse_for_value("")
' "$figma_json"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71772406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档