在 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.
我做了一个目录~/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.