在 shell 脚本中使用 base 64 returns 空或 null 编码字符串
encode string with base 64 returns empty or null in shell script
我正在尝试准备 url,其中电子邮件地址将进行 base64 编码。然而,当我用 base64 编码电子邮件时,它 returns 空字符串,没有 base64 编码这工作正常,我在这里错过了什么?
这里是 shell 没有 base64 编码的脚本
#!/bin/bash
link='unsubscribe'
testVar="$link/""me@domain.com"
echo "www.somedomain.com/$testVar/email/"
输出:
www.somedomain.com/unsubscribe/me@domain/email/
我正在尝试像这样使用 base64 对电子邮件进行编码:
#!/bin/bash
link='unsubscribe'
testVar="$link/""me@domain.com"|base64
echo "www.somedomain.com/$testVar/email/"
输出
www.somedomain.com/unsubscribe//email/
注意邮件没有编码,返回空值
我在这里缺少什么?
你没有传递变量test
中包含的字符串到base64
命令,使用Command substitution $(..)语法传递字符串而不命令的换行符,使用 printf
#!/usr/bin/bash
link='unsubscribe'
test=$(printf "%s" "$link/""me@domain.com" | base64)
echo "www.somedomain.com/${test}/email/"
产生的输出为
www.somedomain.com/dW5zdWJzY3JpYmUvbWVAZG9tYWluLmNvbQ==/email/
与您的实际问题无关,但我认为作为一般编码准则,您应该不将变量命名为test
,因为这很容易与test
operator in bash
。如果您可以为变量的用途添加更多上下文,那将会很好,可能是 testVar
、testStr
或 testRef
.
我正在尝试准备 url,其中电子邮件地址将进行 base64 编码。然而,当我用 base64 编码电子邮件时,它 returns 空字符串,没有 base64 编码这工作正常,我在这里错过了什么?
这里是 shell 没有 base64 编码的脚本
#!/bin/bash
link='unsubscribe'
testVar="$link/""me@domain.com"
echo "www.somedomain.com/$testVar/email/"
输出:
www.somedomain.com/unsubscribe/me@domain/email/
我正在尝试像这样使用 base64 对电子邮件进行编码:
#!/bin/bash
link='unsubscribe'
testVar="$link/""me@domain.com"|base64
echo "www.somedomain.com/$testVar/email/"
输出
www.somedomain.com/unsubscribe//email/
注意邮件没有编码,返回空值
我在这里缺少什么?
你没有传递变量test
中包含的字符串到base64
命令,使用Command substitution $(..)语法传递字符串而不命令的换行符,使用 printf
#!/usr/bin/bash
link='unsubscribe'
test=$(printf "%s" "$link/""me@domain.com" | base64)
echo "www.somedomain.com/${test}/email/"
产生的输出为
www.somedomain.com/dW5zdWJzY3JpYmUvbWVAZG9tYWluLmNvbQ==/email/
与您的实际问题无关,但我认为作为一般编码准则,您应该不将变量命名为test
,因为这很容易与test
operator in bash
。如果您可以为变量的用途添加更多上下文,那将会很好,可能是 testVar
、testStr
或 testRef
.