【发布时间】:2015-04-07 00:35:27
【问题描述】:
在我的系统上*
cd # move to home
mkdir tempdir
PATH="$PATH:~/tempdir" # put tempdir in path
touch tempdir/tempscript
echo -e '#!/bin/bash\necho h' > tempdir/tempscript # write script
chmod u+x tempdir/tempscript # make executable
tempscript # execute
将找到脚本tempdir/tempscript 并打印h。
但是,如果我们回显$PATH,我们将在其末尾看到~/tempdir,因此它没有扩展。这是我们期望发生的事情,因为我们在赋值两边加上了双引号。
我找不到任何文档说明为什么在评估 $PATH 时会发生波浪号扩展。 (请注意,PATH 变量中仍然包含 ~。)
这是可移植的行为吗?
* 带有 GNU bash 3.2 的 Mac OS X
【问题讨论】:
-
在
BASH它是可移植的行为。看看:Tilde Expansion -
@user3439894,这是真的如果没有引用。引用可以防止波浪号扩展,即使分配给变量也是如此。这在您链接的文档中明确说明:“每个变量赋值都检查了 unquoted tilde-prefixes”
-
@Charles Duffy,好吧,我想从现在开始,我所说的一切都符合条件!是的,在规则范围内这样做是可移植的,因此我在第一条评论中包含了链接,因为我希望用户也能 RT*M!
-
@user3439894, ...但 OP 明确展示了一个引用的分配。合理的读者可能会期望“this”指的是该演示中给出的代码。-
-
@Charles Duffy,好的,我错过了 OP 作业中的引述! :)
标签: bash portability path-variables tilde-expansion