我尝试编写一个简单的shell脚本来构建用于分析的管道,一步涉及构建现有目录和文件的符号链接。
最初我设置如下:
dir='~/project/xxxx/'
ln -s $dir .
但是,上述代码并不起作用。
我发现,在执行shell脚本时,它没有被扩展。
我尝试在目录路径周围使用双引号而不是单引号,但这也没有用。
以下工作
dir="$HOME/project/xxxx/"
ln -s $dir .
我只是想知道为什么〜没有用。这个现象的正式名称是什么?
谢谢!
答案 0 :(得分:4)
在任何类型的引号内都不会出现Tilde扩展。因此,例如,改为使用:
dir=~'/project/xxxx/'
另请注意,如果您使用~username/
格式,则username/
部分也必须不加引号。来自man bash
:
Tilde扩张
If a word begins with an unquoted tilde character (`~'), all of the characters preceding the first unquoted slash (or all charac‐ ters, if there is no unquoted slash) are considered a tilde-pre‐ fix. If none of the characters in the tilde-prefix are quoted, the characters in the tilde-prefix following the tilde are treated as a possible login name. If this login name is the null string, the tilde is replaced with the value of the shell parame‐ ter HOME. If HOME is unset, the home directory of the user exe‐ cuting the shell is substituted instead. Otherwise, the tilde- prefix is replaced with the home directory associated with the specified login name.
答案 1 :(得分:2)
I figured it out that the ~ didn't get expanded inside the shell script when it's executed.
不正确,它不会在单引号中扩展。
The following worked `dir='$HOME/project/xxxx/'`
这是谎言,也不会扩大。
使用不带引号的~
,或使用双引号中没有引号/的$HOME
。
请记住,您可以使用各种引用连接字符串:
echo a"b"'c'
abc
如果这有助于提高可读性,请从路径中移出~
。
我的建议:更喜欢$HOME
。
答案 2 :(得分:1)
只需从引号中取出代号:dir=~/'project/xxxx/'