有没有办法在REPL(jshell
)上执行java命令作为内联命令而不启动它?
E.g。 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"
我发现了类似的问题here,但是为单个命令创建单独的jsh
文件并不可行。
同一篇文章的另一个解决方案是:echo "1+2"|jshell
temp=`echo 'String.format("%06d", 19)'|jshell`
echo $temp
Ouch输出
| Welcome to JShell -- Version 9 | For an introduction type: /help intro jshell> String.format("%06d", 19) $1 ==> "000019" jshell>
我希望$temp
仅打印000019
。
答案 0 :(得分:1)
默认情况下,normal
反馈模式用于与JShell
的交互,此模式打印命令输出,声明,命令和提示。阅读Introduction to jshell feedback modes了解更多详情。
获取命令输出的步骤:
在jshell
反馈模式下运行concise
以跳过命令和声明详细信息,它仍会打印提示和值。
$ echo 'String.format("%06d", 19)' | jshell --feedback concise
jshell> String.format("%06d", 19)
$1 ==> "000019"
使用sed
-
echo 'String.format("%06d", 19)' | jshell --feedback concise | sed -n '2p'
仅提取值并排除其他详细信息 -
echo 'String.format("%06d", 19)' | jshell --feedback concise | sed -n '2p' |sed -En 's/[^>]*>(.+)/\1/gp'
答案 1 :(得分:0)
如果使用System.out.println,则不需要第二个sed
echo "System.out.println(\"$JAVA_HOME\");" | jshell --feedback concise | sed -n '2p'