我有问题(标准输入)
例如,我编写了以下 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)= 标签及其后的空格?
非常感谢您提供的任何帮助。
幻影
您可以使用参数替换将其从前面剥离,如下所示:
a="(STDIN)= 0A0A9F2A6772942557AB5355D76AF442F8F65E01"
b=${a#*= } # Strip up to "=" sign
echo $b
0A0A9F2A6772942557AB5355D76AF442F8F65E01
Run Code Online (Sandbox Code Playgroud)
我怀疑 openssl 有一个选项可以阻止它生成“(STDIN)”部分,但我的没有这样做。
如果您想了解有关此类事情的更多信息,请查看此处。
可能不是最好的解决方案,但您可以使用 awk 选择第二列。像这样:
echo -n $temp_var1 | openssl sha1 | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)