在 Bash 变量赋值的右侧引用时波浪号未展开

Tilde not expanded when quoting on the right hand side of a Bash variable assignment

我做了一个目录~/test_myDir

然后我运行下面的bash脚本:

x="myDir"

dirName="~/test_$x"

cd $dirName
echo "hey" > test.txt

我收到以下错误:

test.sh: line 5: cd: ~/test_myDir: No such file or directory

然后我从第二个作业中删除引号:

x="myDir"

dirName=~/test_$x

cd $dirName
echo "hey" > test.txt

脚本 运行没有错误。

这是怎么回事?我 运行 在一个更大、更复杂的脚本中解决了这个问题,并将其缩小到我在包含另一个变量的变量赋值中使用引号。

不过,从错误消息来看,完整路径似乎在 "cd" 调用中被正确展开。

引号阻止 ~ 的扩展。将 ~ 替换为 $HOME 或使用 dirName=~/"test_$x".

来自手册对波浪线扩展的解释:

Each variable assignment is checked for unquoted tilde-prefixes immediately following a : or the first =. In these cases, tilde expansion is also performed.