2

有没有办法在 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)
$1 ==> "000019"

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

同一篇文章的另一个解决方案是: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) $1 ==> "000019" jshell>

$temp只期待 print 000019

4

2 回答 2

0

默认情况下,normal反馈模式用于您的交互,JShell并且此模式打印命令输出、声明、命令和提示。阅读jshell 反馈模式简介了解更多详细信息。

获取命令输出的步骤:

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

     $ echo 'String.format("%06d", 19)' | jshell --feedback concise
       jshell> String.format("%06d", 19)
       $1 ==> "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/[^>]*>(.+)/\1/gp'
    
于 2017-10-14T06:28:16.213 回答
-1

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

echo "System.out.println(\"$JAVA_HOME\");" | jshell --feedback concise | sed -n '2p'
于 2019-01-29T17:42:26.543 回答