如何从字符串选项中转义字符

问题描述

我有一个命令和几个选项的简单Java应用程序。对于一个选项,我想传递带有单引号和空格的字符串。有可能吗?

我使用picocli 4.5.0。以下是我要实现的目标

java -jar my-app.jar my-command --arg-a=aaa --arg-b=bbb --arg-c="x=y and z=w(to_date(xxx,'YYYYMMDD'))"

我将trimQuotes设置为false,但出现错误

Unmatched arguments from index X: 'and' 'z=w(to_date(xxx,'YYYYMMDD'))'

是否可以转义整个字符串/选项?

@Command(name = "process-data",description = "Bla bla bla...")
public class MyApp implements Callable<Integer> {
   @Option(
       names = {"--arg-a"},required = true
    )
    private String argA;

    @Option(
        names = {"--arg-b"},required = true
    )
    private String argB;

   @Option(
        names = {"--arg-c"},required = true
    )
    private String argC;

    @Override
    public Integer call() {
    ...
    }
}

public static void main(String[] args) {
    new CommandLine(MyApp.create()).execute(args);
}

解决方法

不需要trimQuotes。以下作品:

@Command(description = "nothing here",name = "my-command",version = "0.1")
public class MyCommand implements Callable<Void> {
    @Option(names = {"--arg-a"},description = "A")
    private String a;

    @Option(names = {"--arg-b"},description = "B")
    private String b;

    @Option(names = {"--arg-c"},description = "C")
    private String c;

    public static void main(final String[] args) {
        System.exit(new CommandLine(new MyCommand()).execute(args));
    }

    @Override
    public Void call() throws Exception {
        System.err.printf("a = %s\nb = %s\nc = %s\n",a,b,c);
        return null;
    }
}
⟩⟩⟩ java MyCommand --arg-a=aaa --arg-b=bbb --arg-c="x=y and z=w(to_date(xxx,'YYYYMMDD'))"
a = aaa
b = bbb
c = x=y and z=w(to_date(xxx,'YYYYMMDD'))

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...