PicoCLI解析含$符号的密码时丢失内容,如何解决?
解决picocli解析含美元符号($)密码被截断的问题
这个问题不是picocli的问题,而是你的命令行shell(比如bash、zsh)会把$符号识别为变量引用标记,自动解析并替换$后面的内容:如果$34是未定义的shell变量,就会被替换为空字符串,导致最终传到Java程序里的密码变成test234。
解决方法分两种场景:
直接在终端执行命令时
- 用单引号包裹密码:shell不会解析单引号内的变量,能原样保留
$符号:java -jar encryption.jar passwd-enc -password 'test23$34' -key /user/local/key.txt - 转义美元符号:在
$前添加反斜杠\,让shell把$当作普通字符处理:java -jar encryption.jar passwd-enc -password "test23\$34" -key /user/local/key.txt
在脚本中传递密码变量时
如果密码是存储在脚本变量里的,传递时要确保变量被正确转义:
# 定义密码时用单引号,避免提前解析 password='test23$34' # 传递时用双引号包裹变量,确保shell不解析内部的$ java -jar encryption.jar passwd-enc -password "$password" -key /user/local/key.txt
或者提前对变量中的$进行转义处理:
password="test23\$34" java -jar encryption.jar passwd-enc -password "$password" -key /user/local/key.txt
内容的提问来源于stack exchange,提问作者Panda1667075
相关产品推荐
相关产品推荐

