我有一个分配了哈希值的变量。例如:
hash=$1$qGqTE/jV$syM.7qpaKlCTsBXOYu2op/
现在,当我在bash中执行echo $hash
时,它会返回:
/jV.7qpaKlCTsBXOYu2op/
如何让散列值不能转义任何字符?或让echo $hash
返回整个字符串$1$qGqTE/jV$syM.7qpaKlCTsBXOYu2op/
?
非常感谢任何帮助。
答案 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变量的引用放在双引号中。