删除(STDIN)=标签在BASH
问题描述:
我有(STDIN)删除(STDIN)=标签在BASH
我写以下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)=标签和它后面的空格?
非常感谢您提供任何帮助。
MIRAGE
答
可以使用参数替代像这样剥离它关闭前:
a="(STDIN)= 0A0A9F2A6772942557AB5355D76AF442F8F65E01"
b=${a#*= } # Strip up to "=" sign
echo $b
0A0A9F2A6772942557AB5355D76AF442F8F65E01
我怀疑有一个选项OpenSSL的停止它生成“(STDIN)”的一部分,但我不这样做。
如果您想了解更多关于这种事情,看看here.
答
可能不是最好的解决办法,但你可以使用awk来选择第二列。像这样:
echo -n $temp_var1 | openssl sha1 | awk '{print $2}'
可能会矫枉过正,但是当使用二进制标志时,它不会输出“(STDIN)”部分。之后您将不得不将其转换为十六进制。如: 'echo -n $ temp_var1 | openssl sha1 -binary | xxd -p“ – Timmah