使用变量构建路径名作为触摸的输入

使用变量构建路径名作为触摸的输入

我想存储一个我经常使用的路径作为环境变量,然后调用这个变量来构造路径名。

$ mypath="~/local/bin/"
$ newFile="${mypath}newFile.sh"
$ echo $newFile
~/local/bin/newFile.sh

这似乎有效。

但是,如果我调用 $newFile 作为 touch 的输入,则会失败:

$ touch $newFile
touch: ~/local/bin/newFile.sh: No such file or directory

$ touch "${mypath}newFile.sh"
touch: ~/local/bin/newFile.sh: No such file or directory

两者都不起作用。我缺少什么?

PS 我确信这已经被讨论过,但我是 bash 新手,所以我还不知道要搜索的行话是什么。谢谢你的帮助。

答案1

由于扩展顺序的原因,这不会按照您期望的方式工作。

来自 bash 手册:

展开的顺序是:大括号展开;波形符扩展、参数和变量扩展、算术扩展和命令替换(以从左到右的方式完成);分词;和路径名扩展。

在第一行中,~如果不带引号使用,则会扩展。事实上,~引号内部不会扩展,并且后面也不会扩展,因为波形符扩展是在变量扩展之前完成的。

您写道它似乎有效,但事实上echois的输出~/local/bin/newFile.sh表明它不起作用。

如果由于值包含空格而需要引用,则可以引用后面的部分~/

mypath=~/"local/bin with spaces/"
newFile="${mypath}newFile.sh"
echo "$newFile"

答案2

显然,我立刻就找到了答案。

$ newFile="${mypath}newFile.sh"
touch newFile

不起作用

$ newFile=${mypath}newFile.sh
touch newFile

确实有效

相关内容