在shell中复制变量部分字节

yfjy0ee7  于 2023-02-16  发布在  Shell
关注(0)|答案(1)|浏览(104)

我的shell文件中包含以下内容:

#!/usr/bin/env bash

api_params_with_timestamp="somethingXXXX"
SECRET_KEY="XXXXXXXXXXXXXX"
signature=$(echo -n "$api_params_with_timestamp" \
        | openssl dgst -sha256 -hmac "$SECRET_KEY")
echo "signature"=$signature

执行我得到的shell

signature=(stdin)= 3eee8d204c83381dddffgggg

我只需要"3eee8d204c83381dddffgggg"部分,我该怎么做才能跳过(stdin)=部分?!
编辑:

signature=$(echo -n "$api_params_with_timestamp" \
        | openssl dgst -sha256 -hmac "$SECRET_KEY" | cut -c10-1000)

不完美,但工作!

sqserrrh

sqserrrh1#

openssl-dgst页面没有提供删除输出中"(stdin)= "部分的直接选项,但是可以通过cutgrepsed轻松完成。

    • 带有cut**
signature=$(echo -n "$api_params_with_timestamp" \
        | openssl dgst -sha256 -hmac "$SECRET_KEY" \
        | cut -d ' ' -f2)
    • 带有grep**
signature=$(echo -n "$api_params_with_timestamp" \
        | openssl dgst -sha256 -hmac "$SECRET_KEY" \
        | grep -E -o '[^ ]+$')
    • 带有sed**
signature=$(echo -n "$api_params_with_timestamp" \
        | openssl dgst -sha256 -hmac "$SECRET_KEY" \
        | sed 's/^.*[[:space:]]//')
    • 注意:**您也可以删除行分隔符"\",而使用竖线来实现此目的,例如
signature=$(echo -n "$api_params_with_timestamp" |
        openssl dgst -sha256 -hmac "$SECRET_KEY" |
        sed 's/^.*[[:space:]]//')

哪种方式都行--随你。

    • 使用/输出示例**
$ api_params_with_timestamp="somethingXXXX"
> SECRET_KEY="XXXXXXXXXXXXXX"
> signature=$(echo -n "$api_params_with_timestamp" |
>         openssl dgst -sha256 -hmac "$SECRET_KEY" |
>         sed 's/^.*[[:space:]]//')
> echo $signature
46c86ea27df85b8ab9a8c565a344cadd1230f32ff1d773ba0fa5aa1076116d0b

相关问题