我有这个命令:
echo -n "cdt_main!@#$" | base64
失败了:
bash: !@#$": event not found
lulz b / c的特殊字符。 所以我最好的猜测是这是正确的:
echo -n "cdt_main\!\@#\$" | base64
至少这是b / c现在没有错误。不幸的是,我无法测试base64版本的密码,直到我知道它是正确的 - 我只有一次机会让它正确o / w会爆炸。 这看起来对你好吗?
使用解码技巧,我有:
echo -n "cdt_main\!\@#\$" | base64 | base64 --decode
产生:
cdt_main\!\@#$
给定输出,不确定这是否按计划工作,因为斜杠在那里。
答案 0 :(得分:2)
问题在于打开了bash的历史扩展。除非您的历史扩展是您积极想要和使用的东西,否则解决方案就是关闭它。
观察到event not found
$ echo -n "cdt_main!@#$" | base64
bash: !@#: event not found
但是,这成功了:
$ set +H
$ echo -n "cdt_main!@#$" | base64
Y2R0X21haW4hQCMk
set +H
关闭了历史扩张。
对于双引号内的字符串,shell将执行各种扩展。为了防止这种情况,请将字符串改为单引号。
例如,即使启用了历史记录扩展,以下内容也会成功:
$ set -H
$ echo -n 'cdt_main!@#$' | base64
Y2R0X21haW4hQCMk
所有shell都不支持-n
的{{1}}选项。对于更便携的解决方案,应该Gordon Davisson建议使用echo
:
printf
答案 1 :(得分:1)
@ John1024是对的,但更通用的解决方案是使用:
echo -n 'cdt_main!@#$' | base64
单引号'
表示字符串中的字符不是由bash解释的,非常好。