我遇到了问题(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
这个完整的脚本可以很好地解决一个关键问题。 输出不是我想要的。 例如输入
Hello, World!
我想获得以下输出: -
Below is the UPPERCASE SHA1 Hash of your string
</yourHash>0A0A9F2A6772942557AB5355D76AF442F8F65E01</yourHash>
而我得到的是: -
Below is the UPPERCASE SHA1 Hash of your string
</yourHash>(STDIN)= 0A0A9F2A6772942557AB5355D76AF442F8F65E01</yourHash>
我的问题是。我如何删除此(STDIN)= lable及其后面的空格?
非常感谢您提供任何帮助。
幻影
答案 0 :(得分:3)
您可以使用参数替换将其从前面剥离:
a="(STDIN)= 0A0A9F2A6772942557AB5355D76AF442F8F65E01"
b=${a#*= } # Strip up to "=" sign
echo $b
0A0A9F2A6772942557AB5355D76AF442F8F65E01
我怀疑openssl有一个选项可以阻止它生成“(STDIN)”部分,但是我不会这样做。
如果您想了解有关此类事情的更多信息,请查看here.
答案 1 :(得分:1)
我也成功地使用了这种方法(使用 sed):
hash="(STDIN)= 0A0A9F2A6772942557AB5355D76AF442F8F65E01"
echo "before"
echo $hash
hash=$(echo $hash | sed 's/(stdin)= //g') #remove identified pattern globally
echo "after"
echo $hash
结果
before
(STDIN)= 0A0A9F2A6772942557AB5355D76AF442F8F65E01
after
0A0A9F2A6772942557AB5355D76AF442F8F65E01
答案 2 :(得分:0)
可能不是最佳解决方案,但您可以使用awk选择第二列。像这样:
echo -n $temp_var1 | openssl sha1 | awk '{print $2}'