【问题标题】:Bash: Generate md5 hash of string with special charactersBash:使用特殊字符生成字符串的 md5 哈希
【发布时间】:2017-01-18 14:18:08
【问题描述】:

我想创建一个 bash 脚本来创建字符串的 md5 哈希。 但是字符串可以包含特殊字符和空格。我怎样才能知道这样的字符串是可读的,例如。 md5sum?

我已将以下脚本编写为“md5.sh”:

#!/bin/bash
echo -n $1 | md5sum | awk '{print $1}'

但如果我使用“./md5.sh”(末尾有一个空格),这将无法识别。 引用的也无法从脚本中读取。单个 " 将以提示符结尾...

希望有人可以帮助我:)

【问题讨论】:

  • a single " will end in an prompt - 你必须引用脚本的参数,所以如果你这样做 ./md5.sh '"' (这是两个单引号内的双引号)你会得到正确的响应。任何包含空格的字符串也是如此

标签: bash shell hash character space


【解决方案1】:

首先,您需要在脚本中引用参数(并使用printf;如果人们忘记了echo 的存在,世界会变得更美好):

printf '%s' "$1" | md5sum | awk '{print $1}'

其次,要传递一个实际的空格作为参数,它也必须被引用,这样shell就不会丢弃它:

./md5.sh " "

【讨论】:

  • 谢谢,这适用于空格,但其他特殊字符呢?例如。对于单人或双人将起作用:./md5.sh '"'./md5.sh "'"。但是如果字符串同时包含单引号和双引号呢?
  • 如果它包含两种类型的引号,您需要用反斜杠转义它们。 "'\"" 是一个由单引号和双引号组成的字符串。请注意,您甚至不能在单引号内包含转义的单引号('\'' 不是有效字符串,或者更确切地说,它是带引号的反斜杠后跟未闭合的单引号),尽管 bash 提供了另一种引用形式允许转义单引号:$'\''.
猜你喜欢
  • 2011-04-01
  • 2018-12-10
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
  • 2012-07-12
  • 1970-01-01
  • 2015-03-17
相关资源
最近更新 更多