【问题标题】:~ is being replaced by a variable's value in bash~ 被 bash 中的变量值替换
【发布时间】:2015-05-05 13:15:06
【问题描述】:

所以我有一个脚本可以做到这一点

wget firefoxDownloadLink -o ~/firefox
mkdir ~/firefox-17
cd ~/firefox-17
tar xjf ~/firefox-17.0.1.tar.bz2

我得到了这个,但不知道为什么:

cd: context: No such file or directory
mkdir: cannot create directory `context/firefox-17': No such file or directory
cd: context/firefox-17: No such file or directory
tar (child): context/firefox-17.0.1.tar.bz2: Cannot open: No such file or directory

我已经设置了一个带有上下文值的变量,但我不明白为什么~ 被替换为该值。如果我没有设置该值,它可以正常工作,但现在我需要它。

对可能发生的事情有什么建议吗?

【问题讨论】:

  • “我设置了一个变量”——那个变量不会是HOME,对吧?

标签: linux bash shell variables scripting


【解决方案1】:

~ 被替换为$HOME 的值,它通常指向您的主目录。看起来你已经覆盖了$HOME

来自 bash 手册页:

如果单词以不带引号的波浪号字符 (~) 开头,则第一个不带引号的斜杠之前的所有字符(或所有字符,如果没有不带引号的斜杠)都被视为波浪号前缀。如果波浪号前缀中没有任何字符被引用,波浪号后面的波浪号前缀中的字符将被视为可能的登录名。如果此登录名是空字符串,波浪号将替换为 shell 参数 HOME 的值。如果 HOME 未设置,则替换执行 shell 的用户的主目录。否则,波浪号前缀将替换为与指定登录名关联的主目录。

【讨论】:

    猜你喜欢
    • 2020-08-14
    • 2022-11-11
    • 2011-11-05
    • 1970-01-01
    • 2014-09-08
    • 2013-12-10
    • 2011-12-02
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多