工具jq在windows和Linux上的工作方式不同吗?

工具jq在windows和Linux上的工作方式不同吗?

以下是 Json 格式的文件内容

{
  "FD_sfdsdf:ClientMasterBaseUrl": "http://example.com",
  "FD_fsdfs:CommonAPIBaseUrl": "http://example.com",
  "FD_sdfsadfsdf:Secret": "sdfsdf"
}

命令:

cat fd.json| jq -r 'to_entries[] | "setx \(.key) \"\(.value)\""'

我在 Windows CMD 中运行它。

输出:

setx FD_sfdsdf:ClientMasterBaseUrl "http://example.com"

以上是我在 MAC 和 Linux 中得到的期望输出,但相同的命令在 Windows 中不起作用。

错误:

'"setx \(.key) \"\' is not recognized as an internal or external command, operable program or batch file.

答案1

1.不使用:要组成变量名,此字符用于变量名内部/旁边的多个操作,看看这里有谁

2.如果目标是定义一个从文件中获取字符串的变量.json,那么您只需使用 cmd...


  • 在你的 bat/cmd 文件中:

    @echo off & cd /d "%~dp0"
    
    for /f tokens^=1-4delims^=^:^"^,^  %%i in ('
         type file.json^|find /i "FD_sfdsdf"')do setx FD_sfdsdf_%%~j "\"%%~k:%%~l\""
    
  • 在您的命令行中:

    for /f tokens^=1-4delims^=^:^"^,^  %i in ('type file.json^|find /i "FD_sfdsdf"')do setx FD_sfdsdf_%~j "\"%~k:%~l\""
    

  • 输出:

    在此处输入图片描述

  • 观察:1.您需要两个空格(spacespace),一个是作为分隔符与其他字符一起使用,另一个是相对于for /f循环语法:

    for /f tokens^=1-4delims^=^:^"^,^spacespace%%i

  • 观察:2。对于双引号,只需\"在 Windows 注册表中添加并转义即可:

    ...)do setx FD_sfdsdf_%%~j "\"%%~k:%%~l\""

相关内容