nbl*_*dfo 1 authentication bash base64 encoding
我尝试在 bash 脚本中对用户:密码字符串进行 Base64 编码,但是脚本中的结果与在 shell 中运行命令时不同。
在 shell 中(预期输出):
echo -n "user:password" | base64
dXNlcjpwYXNzd29yZA==
Run Code Online (Sandbox Code Playgroud)
在脚本中(w/-n):
USER=$(echo -n "user:password" | base64)
echo $USER
LW4gdXNlcjpwYXNzd29yZAo=
Run Code Online (Sandbox Code Playgroud)
在脚本中(w/o -n,末尾有额外字符):
USER=$(echo "user:password" | base64)
echo $USER
dXNlcjpwYXNzd29yZAo=
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我我在这里缺少什么吗?谢谢
通过使用#!/bin/shshebang,您很可能会要求bash(或者现在几乎总是指向另一个 shell 的链接的任何/bin/shshell)以 POSIX 兼容模式执行您的脚本:
如果使用 sh 名称调用 bash,它会尝试尽可能模仿 sh 历史版本的启动行为,同时也符合 POSIX 标准。
您的问题是 POSIXecho没有定义-n标志,因此在您的命令中将其理解为要在输出中显示的另一个参数。确实,LW4gdXNlcjpwYXNzd29yZAo=是-n user:password.
您应该使用printf而不是echo,它的行为定义得更好,并且实现之间的差异较小。
此外,除非您需要您的脚本是可移植的并且可能在bash不可用的平台上运行,否则我建议您使用#!/usr/bin/env bashshebang 而不是您的脚本#!/bin/sh,这样您就可以享受到这些bash好处。
| 归档时间: |
|
| 查看次数: |
2403 次 |
| 最近记录: |