我正在寻找一种最简单的单指令解决方案来操作计算字符串。
例如,删除计算字符串上的最后两个字符:md5sum 返回末尾带有“-”。
我可以用两条指令来完成:
$ a=$(echo 'ab'|md5sum); a=$(echo ${a:0:-2})
$ echo $a # (not required instruction)
daa8075d6ac5ff8d0c6d4650adb4ef29
我如何通过一条指令来完成此操作,如下所示?
$ a=${(echo 'ab'|md5sum):0:-2}
-bash: ${(echo 'ab'|md5sum):0:-2}: bad substitution
谢谢。
答案1
POSIXly 你可以使用这个:
a=$(echo 'ab' | md5sum)
a=${a%??}
结果$a
是daa8075d6ac5ff8d0c6d4650adb4ef29
如果您只是要使用 ,则可以省略第二个作业${a%??}
,但除非您要立即使用它,否则我建议您不要这样做。 (随着编码风格的发展,它会将生成所需值的两个部分分开,这反过来又会产生脆弱的关联,从而使代码维护变得更加困难。)
在一项作业中完成此操作是可能的,但效率稍低:
a=$(echo 'ab' | md5sum | sed 's/..$//')
请注意,在这两种情况下,echo 'ab'
MD5 校验和中都会包含尾随换行符。您可能想要使用echo -n 'ab'
,或者更便携printf '%s' 'ab'
。