带有base 64的encode string在shell脚本中返回empty或null

时间:2017-05-15 10:27:36

标签: bash shell encoding base64

我正在尝试准备网址,其中电子邮件地址将是base64编码的。但是,当我使用base64对电子邮件进行编码时,它返回emptry字符串,没有base64编码,这样可以正常工作,我在这里缺少什么?

这里是没有base64编码的shell脚本

#!/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/

请注意,电子邮件未被编码,返回空值

我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

您不是将<{1}}中包含的字符串传递给test命令,使用Command substitution $(..)语法将没有换行符的字符串传递给命令,使用base64

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/ ,因为这很容易与{{3}混淆}。如果您可以为变量的用途添加更多上下文,可能会很好,可能是testtestVartestStr