当前位置: 首页 > 知识库问答 >
问题:

$HOME和“~”(平铺)之间的差异?

焦学海
2023-03-14

我一直认为$HOME~完全相同,因此可以互换使用。今天,当我试图在我的共享服务器上安装pylibmc(一个绑定到memcached的python)时,使用~给了我错误,但没有$HOME。我想解释一下原因。

libmemcache是pylibmc的一个要求。我在我的主目录下安装了libmemcache,因为我在服务器上没有根。因此,要安装pylibmc,我需要确保安装脚本知道在哪里可以找到libmemcache。

执行pythonsetup.py安装--with-libmemcache=~时,安装脚本将运行

gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall \
  -Wstrict-prototypes -fPIC -DUSE_ZLIB -I~/include \
  -I/usr/local/include/python2.7 -c _pylibmcmodule.c \
  -o build/temp.linux-i686-2.7/_pylibmcmodule.o -fno-strict-aliasing

它给出了无法找到libmemcache的错误。

如果我更改为——使用libmemcached=$HOME,脚本将运行

gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall \
  -Wstrict-prototypes -fPIC -DUSE_ZLIB -I/home/waterbotte/include \
  -I/usr/local/include/python2.7 -c _pylibmcmodule.c \
  -o build/temp.linux-i686-2.7/_pylibmcmodule.o -fno-strict-aliasing

没有任何问题。看起来问题在于tilde没有得到解决。但是为什么呢?

共有3个答案

汤飞翮
2023-03-14

~仅当它是单词的第一个字符时才展开,并且它是无引号的

$ echo "~"
~
$ echo foo~
foo~
$ echo ~
/home/guest
$ echo ~/foo
/home/guest/foo

~用户名扩展到用户名主页

$ echo ~root
/root
$ echo ~invaliduser
~invaliduser

要引用文件名,应使用$HOME或引用后缀

$ echo "$HOME/foo bar"
/home/guest/foo bar
$ echo ~/"foo bar"
/home/guest/foo bar
$ echo ~root/"foo bar"
/root/foo bar

注意以下来自"POSIX Tilde扩展"

波浪线扩展产生的路径名应视为引用,以防止其被字段拆分和路径名扩展所改变。

应瀚
2023-03-14

shell将~替换为用户的主目录(更新:或者由其他用户的主目录,如果~后面跟着/以外的东西),但仅当它是第一个字符时一个词。

--with libmemcached=~~不是在开头,因此shell将其单独保留。

明安阳
2023-03-14

波浪是shell扩展的一部分(如bash、csh、zsh等)。$HOME变量是可导出的,可以独立于特定的shell使用。

 类似资料:
  • 在任何情况下(反之亦然),是否有任何理由选择并行的。对于每个而不是等待ForEachAsync?或者它们实际上是相同的? VS公司

  • 问题内容: 很快就有两个相等运算符:double equals( )和Triple equals( ),两者之间有什么区别? 问题答案: 简而言之: 操作员检查其实例值是否相等, 操作员检查引用是否指向同一实例, 长答案: 类是引用类型,可能有多个常量和变量在幕后引用类的同一单个实例。类引用保留在运行时堆栈(RTS)中,其实例保留在内存的堆区域中。当您控制平等时, 这意味着它们的实例是否彼此相等。

  • 我编写了一个简单的脚本,它接受任意数量的参数来演示< code>$@和< code>$*之间的区别: 在我做的 CLI 上 这就是打印出来的 因为它们是相同的,这是否意味着等于?还是我遗漏了一点?

  • 本文向大家介绍前n个自然数的平方和与平方和之间的差。,包括了前n个自然数的平方和与平方和之间的差。的使用技巧和注意事项,需要的朋友参考一下 问题陈述 在给定数字n的情况下,编写一个程序以找到n个平方和与前n个自然数的平方之间的差。 示例 示例 以下是用Java查找所需差异的程序。 输出结果

  • 问题内容: package main 该代码可以很好地工作。但是,如果按如下所示更改方法,则会导致死循环。区别在于将替换为。为什么? 问题答案: 因为程序包检查要打印的值是否具有方法(或换句话说:是否实现接口),如果是,则将调用它以获取值的表示形式。 软件包doc中对此进行了说明: […]如果操作数实现String()字符串方法,则将调用该方法将对象转换为字符串,然后根据动词的要求对其进行格式化(

  • 我正在通过做微控制器项目来自学C++。我当前的项目是使用一对或Adafruit羽毛分组无线电。无线电数据包的库函数需要一个C样式的字符串(我相信),我理解它是一个char的数组。 我已经设置了一个枚举来反映接收方的各种操作,并希望将该状态发送回发送方。所以我想把枚举变成char的数组。 在搜索将枚举转换为char数组的方法时,最简单的方法(对我来说)是将枚举变量传递给带有switch语句的函数,该