bash 对计算变量进行字符串操作?

bash 对计算变量进行字符串操作?

我正在寻找一种最简单的单指令解决方案来操作计算字符串。
例如,删除计算字符串上的最后两个字符: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%??}

结果$adaa8075d6ac5ff8d0c6d4650adb4ef29

如果您只是要使用 ,则可以省略第二个作业${a%??},但除非您要立即使用它,否则我建议您不要这样做。 (随着编码风格的发展,它会将生成所需值的两个部分分开,这反过来又会产生脆弱的关联,从而使代码维护变得更加困难。)

在一项作业中完成此操作是可能的,但效率稍低:

a=$(echo 'ab' | md5sum | sed 's/..$//')

请注意,在这两种情况下,echo 'ab'MD5 校验和中都会包含尾随换行符。您可能想要使用echo -n 'ab',或者更便携printf '%s' 'ab'

相关内容