bash 分配了散列值的变量

bash variable with hash value assigned

我有一个分配了哈希值的变量。例如:

hash=$qGqTE/jV$syM.7qpaKlCTsBXOYu2op/

现在当我在 bash 中执行 echo $hash 时 returns:

/jV.7qpaKlCTsBXOYu2op/

如何让散列值不转义任何字符?或者 echo $hash return 整个字符串 $qGqTE/jV$syM.7qpaKlCTsBXOYu2op/?

非常感谢任何帮助。

定义需要单引号:

$ hash='$qGqTE/jV$syM.7qpaKlCTsBXOYu2op/'
$ echo "$hash"
$qGqTE/jV$syM.7qpaKlCTsBXOYu2op/

没有单引号,shell进行变量替换,结果取决于</code>、<code>$qGqTE$syM定义语句时的返回值已执行。

我还在 echo 语句中添加了双引号。这会阻止 shell 执行分词和路径名扩展。虽然散列值不太可能受这些影响,但使用双引号更安全。作为潜在问题的示例:

$ hash='/bin/le*'
$ echo $hash
/bin/less /bin/lessecho /bin/lessfile /bin/lesskey /bin/lesspipe
$ echo "$hash"
/bin/le*

如您所见,在本例中,echo $hash 执行路径名扩展和 returns 文件列表。然而,echo "$hash" 可以正常工作。为避免此类意外,最好将对 shell 变量的引用放在双引号中。