分配了哈希值的bash变量

时间:2015-01-18 23:04:41

标签: bash shell echo

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

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

现在,当我在bash中执行echo $hash时,它会返回:

/jV.7qpaKlCTsBXOYu2op/

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

定义需要单引号:

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

如果没有单引号,shell会执行变量替换,结果取决于执行定义语句时$1$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执行路径名扩展并返回文件列表。但是,echo "$hash"可以按预期工作。为了避免出现这种意外,最好将shell变量的引用放在双引号中。