如何从 shell 或 windows 命令行以内联方式执行 java jshell 命令

How to execute java jshell command as inline from shell or windows commandLine

是否有任何方法可以在不启动 REPL (jshell) 的情况下将 java 命令作为内联命令执行?

例如Perl 内联命令

$perl -e 'printf("%06d", 19)'
000019

我必须启动 jshell 以 运行 任何命令:

$jshell
|  Welcome to JShell -- Version 9
|  For an introduction type: /help intro
jshell> String.format("%06d", 19)
 ==> "000019"

我发现了类似的问题 ,但是为单个命令创建单独的 jsh 文件并不是可行的解决方案。

同一个 post 的另一个解决方案是:echo "1+2"|jshell

temp=`echo 'String.format("%06d", 19)'|jshell`
echo $temp

哎哟输出

| Welcome to JShell -- Version 9 | For an introduction type: /help intro jshell> String.format("%06d", 19)  ==> "000019" jshell>

我希望 $temp 只打印 000019

默认情况下,normal 反馈模式用于您与 JShell 的交互,此模式打印命令输出、声明、命令和提示。阅读 Introduction to jshell feedback modes 了解更多详情。

获取命令输出的步骤:

  1. 运行 jshell in concise 反馈模式跳过命令和声明细节,它仍然会打印提示和值。

     $ echo 'String.format("%06d", 19)' | jshell --feedback concise
       jshell> String.format("%06d", 19)
        ==> "000019"
    
  2. 使用 sed-

    从结果中过滤第二行
    echo 'String.format("%06d", 19)' | jshell --feedback concise | sed -n '2p'
    
  3. 仅提取值并排除其他详细信息-

    echo 'String.format("%06d", 19)' | jshell --feedback concise | sed -n '2p' |sed -En 's/[^>]*>(.+)//gp'
    

如果使用System.out.println,则不需要第二个sed

echo "System.out.println(\"$JAVA_HOME\");" | jshell --feedback concise | sed -n '2p'