【问题标题】:bash variable with hash value assigned分配了哈希值的 bash 变量
【发布时间】:2015-01-18 23:04:40
【问题描述】:

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

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

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

/jV.7qpaKlCTsBXOYu2op/

如何让哈希值不转义任何字符?还是让echo $hash 返回整个字符串$1$qGqTE/jV$syM.7qpaKlCTsBXOYu2op/

非常感谢任何帮助。

【问题讨论】:

    标签: bash shell echo


    【解决方案1】:

    定义需要单引号:

    $ 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 变量的引用放在双引号中。

    【讨论】:

    • 非常感谢您的解释!
    • 谢谢约翰。我已经做了!非常感谢!
    猜你喜欢
    • 2019-10-28
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多