在 BASH 中删除 (STDIN)= 标签

MiR*_*AGE 3 bash stdin

我有问题(标准输入)

例如,我编写了以下 bash 脚本来计算字符串的 sha1 哈希值并以大写格式输出,以便复制到 plist 文件中。

这是脚本:-

#!/bin/bash        

echo 'Enter String :-';    

read temp_var1;                                          #Read string

hash=$(echo -n $temp_var1 | openssl sha1);               #Copy hash into variable $hash

uphash=$(echo $hash | tr '[:lower:]' '[:upper:]';);      #Convert hash to Upper-case

echo 'Below is the UPPERCASE SHA1 Hash of your string';

echo '  </yourHash>'$uphash'</yourHash>';                #Echo formatted string
Run Code Online (Sandbox Code Playgroud)

整个脚本可以很好地解决一个关键问题。输出不是我想要的。例如输入

Hello, World!
Run Code Online (Sandbox Code Playgroud)

我想获得以下输出:-

Below is the UPPERCASE SHA1 Hash of your string
</yourHash>0A0A9F2A6772942557AB5355D76AF442F8F65E01</yourHash>
Run Code Online (Sandbox Code Playgroud)

相反,我得到的是:-

Below is the UPPERCASE SHA1 Hash of your string
</yourHash>(STDIN)= 0A0A9F2A6772942557AB5355D76AF442F8F65E01</yourHash>
Run Code Online (Sandbox Code Playgroud)

我的问题是。如何删除此 (STDIN)= 标签及其后的空格?

非常感谢您提供的任何帮助。

幻影

Mar*_*ell 5

您可以使用参数替换将其从前面剥离,如下所示:

a="(STDIN)= 0A0A9F2A6772942557AB5355D76AF442F8F65E01"
b=${a#*= }    # Strip up to "=" sign
echo $b
0A0A9F2A6772942557AB5355D76AF442F8F65E01
Run Code Online (Sandbox Code Playgroud)

我怀疑 openssl 有一个选项可以阻止它生成“(STDIN)”部分,但我的没有这样做。

如果您想了解有关此类事情的更多信息,请查看此处。


are*_*naq 5

可能不是最好的解决方案,但您可以使用 awk 选择第二列。像这样:

echo -n $temp_var1 | openssl sha1 | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)